首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪个查询选择器可以找到与来自另一个数组的任何项匹配的任何数组项?

哪个查询选择器可以找到与来自另一个数组的任何项匹配的任何数组项?
EN

Stack Overflow用户
提问于 2016-01-04 14:27:06
回答 2查看 76关注 0票数 1

是否有mongo查询选择器允许我检索每个文档,其中,在数组字段中,至少有一个项与另一个数组中的至少一个项匹配?

假设我在reference字段中有一个带有字符串数组的mongo文档

代码语言:javascript
运行
复制
reference: [
    "foo",
    "bar",
    "or",
    "not"
]

我希望选择所有文档,在引用数组字段中可以找到与javascript变量中其他数组中的任何项相匹配的项(让我们称之为target)。

代码语言:javascript
运行
复制
  var  target= [
        "yes",
        "but",
        "not ",
        "yet"
    ];

在本例中,它将匹配,因为not位于两个数组中。

我知道,如果我只在mongo数组中查找一个元素,我就可以使用$in来完成这个任务。但是,我希望避免在target数组上迭代以查找reference数组中包含的每一项。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-04 14:44:20

您可以使用$elemMatch$in相结合来获得您想要的结果:

代码语言:javascript
运行
复制
find({reference: { $elemMatch: { $in : target } } });
票数 2
EN

Stack Overflow用户

发布于 2016-01-04 15:02:28

你可以用聚合来做

代码语言:javascript
运行
复制
db.test.aggregate([
  {$unwind: "$reference"}, 
  {$match: {reference: {$in: target}}}, 
  {$group: {_id: '$_id', reference: {$push: '$reference'}}}
])

您的数据的结果将是:

代码语言:javascript
运行
复制
{ "_id" : ObjectId("568a82f4f5c54a18bcf843c4"), "reference" : [ "not" ] }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34593345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档