Mongodb 使用Atlas$search查询数组
作为输入,我得到一个搜索查询(Mongodb 使用Atlas$search查询数组,mongodb,mongodb-query,mongodb-atlas,mongodb-atlas-search,Mongodb,Mongodb Query,Mongodb Atlas,Mongodb Atlas Search,作为输入,我得到一个搜索查询(应该运算符)和一个过滤器(关于帖子是否受欢迎,必须/不得运算符)。 我从下面开始,作为我的聚合管道的基础: {$search:{component:{} 然后,如果给出查询,我添加以下内容: $search.component.should.push({ 正文:{ 问:问:, 路径:[“data.displayName”], 分数:{ 促进:{ 数值:5, }, }, }, //加上其他 }); 现在,每个帖子都有一个likes数组。如果可能的话,我只想在复合项
应该
运算符)和一个过滤器(关于帖子是否受欢迎,必须
/不得
运算符)。
我从下面开始,作为我的聚合管道的基础:
{$search:{component:{}
然后,如果给出查询,我添加以下内容:
$search.component.should.push({
正文:{
问:问:,
路径:[“data.displayName”],
分数:{
促进:{
数值:5,
},
},
},
//加上其他
});
现在,每个帖子都有一个likes
数组。如果可能的话,我只想在复合项下选择在其喜欢项中包含特定字符串的帖子。必须/不得
我希望避免在计算机上加载数据并在本地过滤文档(我为整个数据库付费,我使用整个数据库!)。如果在聚合管道中不可能进行数组操作,那么还有什么替代方法呢?我仍然对文档和操作符应该在哪里使用感到非常困惑。你太接近了。按照结构化查询的方式,您需要的是composite.filter
。你也可以有必须条款。它将排除不包含该字符串的文档。看这里
$search.compound.must.push({
text: {
query: q,
path: ["data.likes"],
},
// Plus others
});
谢谢你的帮助,但我可能还不够清楚:我想我已经理解了如何在搜索中添加图层,但我不知道如何检查数组是否包含值,就像text
检查字符串中的文本一样。请检查我的编辑。感谢您的澄清@A2BR代码指示是否存在路径,而不是数组是否包含值。。。还是我在这里遗漏了什么?第一个查询是数组是否包含字符串值。但我认为这是一个语义问题,因为你的一些评论并没有准确地使用预期意义上的术语。所以,我想也许你指的是数组,单值数组,这是你的路径。我想我需要进一步澄清。