[英]MongoDB aggregate objects with an array of objects?
這是我在json
收藏的一部分:
[{"company":"Lenovo", "models":
[{"model":"ThinkPad T400", "gens":
[{"gen":"3", "start":2012},
{"gen":"2", "start":2008},
{"gen":"1", "start":2004}]
}...]
}...]
我正在嘗試提出一個聚合命令,該命令將返回以下內容:
[{ "_id":"Lenovo",
"models":[{ "model": "ThinkPad T400",
"gens":["1","2","3"]
}...]
}...]
我嘗試了以下聚合命令,但沒有用:
db.makes.aggregate([{
$group:{
_id: '$company',
models: { $push: {
model: "$models.model",
gen: "$models.gens.gen"
}}
}
}])
我得到這個結果:
[{ "_id":"Lenovo",
"models":[{ "model": ["ThinkPad T400"],
"gens":[ ["1","2","3"] ]
}...]
}...]
這可能是因為我的每個對象都有一個對象數組(模型),並且該對象也有一個對象數組(Gens)。
什么是對 MongoDB 的正確請求,它會返回我的預期結果?
試試這個查詢:
db.makes.aggregate([
{$unwind : '$models'},
{
$group:{
_id: '$company',
models: { $push: {
model: "$models.model",
gen: "$models.gens.gen"
}}
}
}])
輸出將是
{
"_id" : "Lenovo",
"models" : [
{
"model" : "ThinkPad T400",
"gen" : [
"3",
"2",
"1"
]
}
]
}
我可能在這里遺漏了一些東西,但在我看來,您的原始數據與您想要獲得的數據非常相似。 company
設置給Lenovo
文件是否不止一份?
如果沒有,您可以使用更簡單的命令獲得幾乎您正在尋找的內容:
db.makes.find({}, {_id: 0, company: 1, "models.model": 1, "models.gens.gen": 1 });
這不會是您正在尋找的結果:
{
"company": "Lenovo",
"models": [
{
"model": "ThinkPad T400",
"gens": [
{
"gen": 3
},
{
"gen": 2
},
{
"gen": 1
}
]
}
]
}
並且它僅在company
字段已經是唯一的情況下才有效,但是 MongoDB 提供它會更容易,因為您不必使用聚合框架,也不需要展開任何潛在的長數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.