要使用.split()和.include的SQL查询(

问题描述 投票:1回答:1

我的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包括类似于searchWordclasses.name.split(' ').includes(searchWord) - 例如当searchWord == cup返回“绿杯”。在Node中它将是:

   var splice = name.split(' ');
   if(splice.includes(searchWord))

有人能帮助清理我错在哪里吗?

sql node.js split include azure-cosmosdb
1个回答
1
投票

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团队以支持此类功能。

© www.soinside.com 2019 - 2024. All rights reserved.