是否有mongo查询选择器允许我检索每个文档,在数组字段中,至少有一个项目与另一个数组中的至少一个项目匹配?
我们说我在reference
字段中有一个包含字符串数组的mongo文档
reference: [
"foo",
"bar",
"or",
"not"
]
我想选择所有文件,我可以在参考数组字段中找到一个项目,该项目与javascript变量中另一个数组中的任何项目相匹配(让我们称之为target
)
var target= [
"yes",
"but",
"not ",
"yet"
];
在这个例子中它会匹配,因为not
在两个数组中。
我知道如果我只在mongo数组中查找一个元素,我可以使用$in
来完成它。但是,我宁愿避免在我的target
数组上进行迭代,以查找reference
数组中包含的每个项目。
答案 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" ] }