我在这个Structure中有MongoDB中的这个集合。现在我需要查询这个数据以获得权重为60的relatedPeople。我搜索了这个,但发现特定的大多数查询使用$符号提供数据,但它给你rootnode但不是嵌套节点正在加工的信息。
{
"_id": "7686348264868327",
"Name": "myName",
"phoneNo": "12434576896",
"ExtraDetails": {
"TotalPeople": 10,
"activePeople": 8,
"lostPeople": 2,
"relatedPeople": [{
"Name": "reev",
"Relation": "Father",
"Weight": 60
},
{
"Name": "magen2",
"Relation": "Mother",
"Weight": 60
},
{
"Name": "neo",
"Relation": "Gardian",
"Weight": 70
}
]
}
}
{
"_id": "76866898698798",
"Name": "myName2",
"phoneNo": "867867868",
"ExtraDetails": {
"TotalPeople": 8,
"activePeople": 6,
"lostPeople": 2,
"relatedPeople": [{
"Name": "amazing",
"Relation": "Father",
"Weight": 60
},
{
"Name": "caring",
"Relation": "Mother",
"Weight": 90
},
{
"Name": "neo",
"Relation": "Gardian",
"Weight": 75
}
]
}
}
输出应该是这样的东西
"relatedPeople":[
{
"Name": "reev",
"Relation": "Father",
"Weight": 60
},
{
"Name": "magen2",
"Relation": "Mother",
"Weight": 60
},
{
"Name": "amazing",
"Relation": "Father",
"Weight": 60
}
]
或者
[{
"Name": "reev",
"Relation": "Father",
"Weight": 60
},
{
"Name": "magen2",
"Relation": "Mother",
"Weight": 60
},
{
"Name": "amazing",
"Relation": "Father",
"Weight": 60
}]
答案 0 :(得分:1)
您可以尝试以下解决方案:
db.collection.aggregate([
{ $match: { "ExtraDetails.relatedPeople.Weight": 60 } },
{ $project: { "ExtraDetails.relatedPeople": 1 } },
{ $unwind: "$ExtraDetails.relatedPeople" },
{ $match: { "ExtraDetails.relatedPeople.Weight": 60 } },
{ $replaceRoot: { newRoot: "$ExtraDetails.relatedPeople" } }
])
我使用$unwind在$ match和$replaceRoot中将relatedPeople作为单独的文档进行查询以摆脱嵌套。
或者,要获得第一个预期形状,您可以使用$ group with $ push:
db.collection.aggregate([
{ $match: { "ExtraDetails.relatedPeople.Weight": 60 } },
{ $project: { "ExtraDetails.relatedPeople": 1 } },
{ $unwind: "$ExtraDetails.relatedPeople" },
{ $match: { "ExtraDetails.relatedPeople.Weight": 60 } },
{
$group: {
_id: null,
relatedPeople: { $push: "$ExtraDetails.relatedPeople" }
}
},
{ $project: { _id: 0 } }
])