我的Azure Cosmos DB有以下SQL查询
SELECT distinct c.id1,stuff.id2,e.id3 FROM c
join stuff in c.stuff
join d in stuff.a.b.c.d
join e in d.e
where ARRAY_CONTAINS(e.classes,{name:"${searchWord}"},true)
我遇到的问题是,这只会返回精确的name
匹配。
我想要做的是发现任何name
包括类似于searchWord
的classes.name.split(' ').includes(searchWord)
- 例如当searchWord == cup
返回“绿杯”。在Node中它将是:
var splice = name.split(' ');
if(splice.includes(searchWord))
有人能帮助清理我错在哪里吗?
JDT。我假设您要在Cosmos DB SQL API中实现类似于LIKE
的功能。 LIKE
的关键字是CONTAINS
。如果您有一个带有firstName
属性的文档,并且您希望过滤名称'bob'
,那么您将在查询中使用它:
"SELECT * FROM c WHERE CONTAINS(c.firstName, 'bob')"
请尝试下面的sql:
SELECT distinct c.id1,stuff.id2,e.id3 FROM c
join stuff in c.stuff
join d in stuff.a.b.c.d
join e in d.e
join class in e.classes
where contains(class.name,"trees")
希望它可以帮助你。任何关注,请让我知道。(可能有时区差距)
更新答案:
好的,我明白了。但抱歉,目前没有像你在cosmos db中所说过的那样的关键字或功能。所以,我认为你不能完全依赖sql。您可以尝试sql和代码的组合,这样可以消除大量循环并减轻代码压力,这也可以满足您的个性化需求。
此外,您可以提交feedback以询问Azure Cosmos DB团队以支持此类功能。