例如,如果我有一个像这样的文档
{
a: 1,
subdoc: {
b: 2,
c: 3
}
}
如何将其转换为这样的格式?(不使用 project
**)**
{
a: 1,
b: 2,
c: 3
}
发布于 2017-10-12 17:23:38
您可以将与 stage一起使用,如下所示:
db.collection.aggregate([
{ "$addFields": { "subdoc.a": "$a" } },
{ "$replaceRoot": { "newRoot": "$subdoc" } }
])
发布于 2018-09-02 15:17:52
我们可以使用$replaceWith
、$replaceRoot
的别名和$mergeObjects
操作符来实现这一点。
let pipeline = [
{
"$replaceWith": {
"$mergeObjects": [ { "a": "$a" }, "$subdoc" ]
}
}
];
或
let pipeline = [
{
"$replaceRoot": {
"newRoot": {
"$mergeObjects": [{ "a": "$a" }, "$subdoc" ]
}
}
}
];
db.collection.aggregate(pipeline)
发布于 2019-06-10 00:39:49
从Mongo 4.2
开始,可以使用$replaceWith
聚合操作符将一个文档替换为另一个文档(在我们的例子中是一个子文档),作为@chridam提到的$replaceRoot
的语法糖。
因此,我们可以首先在子文档中包含根字段,以继续使用$set
运算符(也是在Mongo 4.2
中引入的,作为$addFields
的别名),然后使用$replaceWith
的子文档替换整个文档
// { a: 1, subdoc: { b: 2, c: 3 } }
db.collection.aggregate([
{ $set: { "subdoc.a": "$a" } },
{ $replaceWith: "$subdoc" }
])
// { b: 2, c: 3, a: 1 }
https://stackoverflow.com/questions/22903849
复制相似问题