[英]Find specific field in an array of embedded documents
我試圖在我的 MongoDB 文檔中找到數組的特定元素,但是我的所有嘗試查詢都返回了所有數組。 如何獲得正確的 object?
我收藏的文檔如下所示:
{
"Achievements": [
{
"AchievementID": 1,
"AchievementEventID": 0
},
{
"AchievementID": 2,
"AchievementEventID": 1
}
],
"Buildings": [
{
"BuildingID": 1,
"BuildingType": "type1"
},
{
"BuildingID": 2,
"BuildingType": "type1"
},
]
}
我試圖只獲取我的Achievements
數組的一個元素:
db.data.find({'Achievements.AchievementEventID': 0})
我希望只獲得AchievementEventID
等於0的元素:
{
"AchievementID": 1,
"AchievementEventID": 0
}
但我得到了整個Achievements
數組。 我怎么能只得到特定的元素?
您可以為此使用 $elemMatch
db.data.find(
{ 'Achievements.AchievementEventID': 0},{Buildings:0, Achievements: {$elemMatch: {AchievementEventID: 0}}}
)
如果上述解決方案不適合您,請嘗試以下解決方案:
db.data.find({"Achievements.AchievementEventID": 0}, {Buildings: 0, 'Achievements.$': 1});
您可以使用聚合而不是這樣的查找
db.data.aggregate( [{'$unwind':'$Achievements'},{$match:{ 'Achievements.AchievementEventID':0 }},{$project:{ 'AchievementID':'$Achievements.AchievementID', 'AchievementEventID':'$Achievements.AchievementEventID' }}]
);
您可以使用聚合查詢,如下例所示。 樣本achive
集合有 3 個文檔:
{
"_id" : 1,
"Achievements" : [
{
"AchievementID" : 1,
"AchievementEventID" : 0
},
{
"AchievementID" : 2,
"AchievementEventID" : 1
}
],
"Buildings" : [
{
"BuildingID" : 1,
"BuildingType" : "type1"
},
{
"BuildingID" : 2,
"BuildingType" : "type1"
}
]
}
{
"_id" : 2,
"Achievements" : [
{
"AchievementID" : 2,
"AchievementEventID" : 2
}
],
"Buildings" : [
{
"BuildingID" : 2,
"BuildingType" : "type2"
}
]
}
{
"_id" : 3,
"Achievements" : [
{
"AchievementID" : 31,
"AchievementEventID" : 1
}
],
"Buildings" : [
{
"BuildingID" : 3,
"BuildingType" : "type3"
}
]
}
查詢:
db.achive.aggregate( [
{ $project: { Buildings: 0} },
{ $unwind: "$Achievements" },
{ $match: { "Achievements.AchievementEventID": { $eq: 1 } } }
])
=>
{ "_id" : 1, "Achievements" : { "AchievementID" : 2, "AchievementEventID" : 1 } }
{ "_id" : 3, "Achievements" : { "AchievementID" : 31, "AchievementEventID" : 1 } }
我添加了_id
字段來標識選定的文檔。
更新查詢:
db.achive.aggregate( [
{ $unwind: "$Achievements" },
{ $match: { "Achievements.AchievementEventID": { $eq: 1 } } },
{ $project: { AchievementID: "$Achievements.AchievementID", _id: 0} },
])
=>
{ "AchievementID" : 2 }
{ "AchievementID" : 31 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.