【问题标题】:How to duplicate fields in document in MongoDB?如何在 MongoDB 中复制文档中的字段?
【发布时间】:2021-09-14 14:20:15
【问题描述】:

我正在尝试复制文档中的某些字段。
如果我们在 object 中有字段,我想将它们复制到外部,反之亦然
我的 MongoDB 版本是 4.2.12。

这是我的收藏:

{
    'id': '1',
    'object': {
        'a': 'OK',
        'b': ''
    }
},
{
    'id': '2',
    'a': '',
    'b': 'OK',
}

这就是我想要的结果:

{
    'id': '1',
    'a': 'OK',
    'b': '',
    'object': {
        'a': 'OK',
        'b': ''
    }
},
{
    'id': '2',
    'a': '',
    'b': 'OK',
    'object': {
        'a': '',
        'b': 'OK'
    }
}

我们将非常感谢您的帮助。

【问题讨论】:

  • {$addFields: {object: "$$ROOT"}}尝试聚合管道

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:
  • $addFields 添加新字段
  • $cond$ifNull 检查字段是否已存在
db.collection.aggregate([
  {
    "$addFields": {
      "a": {
        "$cond": {
          "if": { "$ifNull": [ "$a", null ] },
          "then": "$a",
          "else": "$object.a"
        }
      },
      "b": {
        "$cond": {
          "if": { "$ifNull": [ "$b", null ] },
          "then": "$b",
          "else": "$object.b"
        }
      },
      "object": {
        "$cond": {
          "if": { "$ifNull": [ "$object", null ] },
          "then": "$object",
          "else": { a: "$a", b: "$b"}
        }
      }
    }
  }
])

Working example

【讨论】:

  • 在第一个文档的情况下,效果很好。但不是第二个
  • 对不起,我看到反之亦然。我会更新我的答案。
  • 我更新了我的答案。你能再检查一遍吗?
  • 谢谢!这就是我一直在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
相关资源
最近更新 更多