Ope*_*per 5 mongodb mongodb-query aggregation-framework
如何在MongoDB中执行返回_id的查询,如果FirstArray并且SecondArray在"名称"字段中有共同的元素?
这是集合结构:
{
"_id" : ObjectId("58b8d9e3b2b4e07bff8feed5"),
"FirstArray" : [
{
"Name" : "A",
"Something" : "200 ",
},
{
"Name" : "GF",
"Something" : "100 ",
}
],
"SecondArray" : [
{
"Name" : "BC",
"Something" : "200 ",
},
{
"Name" : "A",
"Something" : "100 ",
}
]
}
Run Code Online (Sandbox Code Playgroud)
use*_*814 10
3.6更新:
使用$match带$expr.$expr允许在$matchstage中使用聚合表达式.
db.collection.aggregate([
{"$match":{
"$expr":{
"$eq":[
{"$size":{"$setIntersection":["$FirstArray.Name","$SecondArray.Name"]}},
0
]
}
}},
{"$project":{"_id":1}}
])
Run Code Online (Sandbox Code Playgroud)
旧版:
您可以尝试$redact使用$setIntersection您的查询.
$setIntersection比较FirstArray小号Names的SecondArray小号NameS和返回的通用名称的文件,然后排列$size和$redact并比较结果与0保留和删除其他文件.
db.collection.aggregate(
[{
$redact: {
$cond: {
if: {
$eq: [{
$size: {
$setIntersection: ["$FirstArray.Name", "$SecondArray.Name"]
}
}, 0]
},
then: "$$KEEP",
else: "$$PRUNE"
}
}
}, {
$project: {
_id: 1
}
}]
)
Run Code Online (Sandbox Code Playgroud)