什么查询选择器可以找到与另一个数组中的任何项匹配的任何数组项?

时间:2016-01-04 14:27:06

标签: javascript mongodb

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

我们说我在reference字段中有一个包含字符串数组的mongo文档

reference: [
    "foo",
    "bar",
    "or",
    "not"
]

我想选择所有文件,我可以在参考数组字段中找到一个项目,该项目与javascript变量中另一个数组中的任何项目相匹配(让我们称之为target

  var  target= [
        "yes",
        "but",
        "not ",
        "yet"
    ];

在这个例子中它会匹配,因为not在两个数组中。

我知道如果我只在mongo数组中查找一个元素,我可以使用$in来完成它。但是,我宁愿避免在我的target数组上进行迭代,以查找reference数组中包含的每个项目。

2 个答案:

答案 0 :(得分:2)

您可以使用$elemMatch结合$in来获得所需的结果:

find({reference: { $elemMatch: { $in : target } } });

答案 1 :(得分:1)

您可以使用aggregation

执行此操作
db.test.aggregate([
  {$unwind: "$reference"}, 
  {$match: {reference: {$in: target}}}, 
  {$group: {_id: '$_id', reference: {$push: '$reference'}}}
])

您的数据的结果将是:

{ "_id" : ObjectId("568a82f4f5c54a18bcf843c4"), "reference" : [ "not" ] }