是否有mongo查询选择器允许我检索每个文档,其中,在数组字段中,至少有一个项与另一个数组中的至少一个项匹配?
假设我在reference字段中有一个带有字符串数组的mongo文档
reference: [
"foo",
"bar",
"or",
"not"
]我希望选择所有文档,在引用数组字段中可以找到与javascript变量中其他数组中的任何项相匹配的项(让我们称之为target)。
var target= [
"yes",
"but",
"not ",
"yet"
];在本例中,它将匹配,因为not位于两个数组中。
我知道,如果我只在mongo数组中查找一个元素,我就可以使用$in来完成这个任务。但是,我希望避免在target数组上迭代以查找reference数组中包含的每一项。
发布于 2016-01-04 14:44:20
您可以使用$elemMatch和$in相结合来获得您想要的结果:
find({reference: { $elemMatch: { $in : target } } });发布于 2016-01-04 15:02:28
你可以用聚合来做
db.test.aggregate([
{$unwind: "$reference"},
{$match: {reference: {$in: target}}},
{$group: {_id: '$_id', reference: {$push: '$reference'}}}
])您的数据的结果将是:
{ "_id" : ObjectId("568a82f4f5c54a18bcf843c4"), "reference" : [ "not" ] }https://stackoverflow.com/questions/34593345
复制相似问题