首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在MongoDB中将子文档展平到根级别?

如何在MongoDB中将子文档展平到根级别?
EN

Stack Overflow用户
提问于 2014-04-07 12:51:13
回答 7查看 21.9K关注 0票数 42

例如,如果我有一个像这样的文档

代码语言:javascript
复制
{
  a: 1,
  subdoc: {
    b: 2,
    c: 3
  }
}

如何将其转换为这样的格式?(不使用 project**)**

代码语言:javascript
复制
{
  a: 1,
  b: 2,
  c: 3
}
EN

回答 7

Stack Overflow用户

发布于 2017-10-12 17:23:38

您可以将与 stage一起使用,如下所示:

代码语言:javascript
复制
db.collection.aggregate([
    { "$addFields": { "subdoc.a": "$a" } },
    { "$replaceRoot": { "newRoot": "$subdoc" }  }
])
票数 32
EN

Stack Overflow用户

发布于 2018-09-02 15:17:52

我们可以使用$replaceWith$replaceRoot的别名和$mergeObjects操作符来实现这一点。

代码语言:javascript
复制
let pipeline = [
   {
      "$replaceWith": {
         "$mergeObjects": [ { "a": "$a" }, "$subdoc" ]
      }
   }
];

代码语言:javascript
复制
let pipeline = [
    {
        "$replaceRoot": {
            "newRoot": {
                "$mergeObjects": [{ "a": "$a" }, "$subdoc" ]
            }
        }
    }
];

db.collection.aggregate(pipeline)
票数 14
EN

Stack Overflow用户

发布于 2019-06-10 00:39:49

Mongo 4.2开始,可以使用$replaceWith聚合操作符将一个文档替换为另一个文档(在我们的例子中是一个子文档),作为@chridam提到的$replaceRoot的语法糖。

因此,我们可以首先在子文档中包含根字段,以继续使用$set运算符(也是在Mongo 4.2中引入的,作为$addFields的别名),然后使用$replaceWith的子文档替换整个文档

代码语言:javascript
复制
// { a: 1, subdoc: { b: 2, c: 3 } }
db.collection.aggregate([
  { $set: { "subdoc.a": "$a" } },
  { $replaceWith: "$subdoc" }
])
// { b: 2, c: 3, a: 1 }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22903849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档