以下是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的正确请求会给我什么结果?
答案 0 :(得分:4)
尝试此查询:
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"
]
}
]
}
答案 1 :(得分:3)
我可能在这里遗漏了一些东西,但在我看来,你的原始数据非常类似于你想要得到的东西。是否有多个文档的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提供的方式会更容易,因为您不必使用聚合框架,也不需要解开任何问题。潜在的长阵列。
答案 2 :(得分:0)