我有像这样的MongoDB集合
{
taskType:1,
client:{name:"Moe",...},
...
},
{
taskType:1,
client:{name:"Larry",...},
...
},
{
taskType:1,
client:{name:"Curly",...},
...
}
我可以在其上运行以下$ project查询
{$project:{_id:0, client:"$client"}}
我得到了这个结果:
[{
client:{name:"Moe",...}
},
{
client:{name:"Larry",...}
},
{
client:{name:"Curly",...}
}]
但我实际上正在寻找这样的结果:
[
{name:"Moe",...},
{name:"Larry",...},
{name:"Curly",...}
]
我该怎么做(如果可以的话)? 提前谢谢。
答案 0 :(得分:5)
您可以使用client.name
将$project
字段提升到顶层:
{$project: {_id: 0, name: "$client.name"}}
MongoDB 3.4更新
现在,您可以使用$replaceRoot
阶段直接执行此操作,而不是使用$project
:
{$replaceRoot: {newRoot: '$client'}}
答案 1 :(得分:1)
使用 $ group 作为
db.c.aggregate([{$group: {_id:0, result:{$push:"$client"}}}]);
或者将地图附加到原始答案:
db.c.aggregate([{$project:{_id:0, client:"$client"}}]).map(function(e) {return e.client;});
答案 2 :(得分:0)
从Mongo 4.2
开始,$replaceWith
聚合运算符可以用来代替另一个文档(在我们的情况下为子文档),作为$replaceRoot
运算符的语法糖:< / p>
// { taskType: 1, client: { name: "Moe", age: 34 }, price: 234 }
// { taskType: 2, client: { name: "Larry", age: 48 }, price: 129 }
db.collection.aggregate({ $replaceWith: "$client" })
// { name: "Moe", age: 34 }
// { name: "Larry", age: 48 }