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代码指示是否存在路径,而不是数组是否包含值。。。还是我在这里遗漏了什么?第一个查询是数组是否包含字符串值。但我认为这是一个语义问题,因为你的一些评论并没有准确地使用预期意义上的术语。所以,我想也许你指的是数组,单值数组,这是你的路径。我想我需要进一步澄清。