【问题标题】:mongodb update document from first element of arraymongodb 从数组的第一个元素更新文档
【发布时间】:2022-12-05 19:28:23
【问题描述】:

考虑具有以下文档的收集客户端:

[
  {
    "id": 1,
    "Name": "Susie",
    "ownership" : {
        "ownershipContextCode" : "C1"
    },
    "clientIds": [
      {
        "clientClusterCode": "clientClusterCode_1",
        "clientId": "11"
      }
    ]
  },
  {
    "id": 2,
    "Name": "John",
    "ownership" : {
        "ownershipContextCode" : "C2"
    },
    "clientIds": [
      {
        "clientClusterCode": "clientClusterCode_2",
        "clientId": "22"
      }
    ]
  }
]

我试图将一个字段 (ownershipClientCode) 设置为 clientIds 数组的第一个元素。 结果应该是这样的:

[
  {
    "id": 1,
    "Name": "Susie",
    "ownership" : {
        "ownershipContextCode" : "C1",
        "ownershipClientCode" : "clientClusterCode_1"
    },
    "clientIds": [
      {
        "clientClusterCode": "clientClusterCode_1",
        "clientId": "11"
      }
    ],
    
  },
  {
    "id": 2,
    "Name": "John",
    "ownership" : {
        "ownershipContextCode" : "C2",
        "ownershipClientCode" : "clientClusterCode_2"
    },
    "clientIds": [
      {
        "clientClusterCode": "clientClusterCode_2",
        "clientId": "22"
      }
    ],
    
  }
]

我正在使用此查询,但无法从数组中的第一个元素获取子对象

db.collection.aggregate([
  {
    $addFields: {
      "Last Semester": {
        "$arrayElemAt": [
          "$clientIds",
          0
        ]
      }
    }
  }
])

此查询添加所有对象,但我只想要字段 (clientClusterCode)。

像那样的东西

db.collection.aggregate([
  {
    $addFields: {
      "Last Semester": {
        "$arrayElemAt": [
          "$clientIds",
          0
        ].clientClusterCode
      }
    }
  }
])

我正在使用 mongodb 4.0.0

【问题讨论】:

    标签: mongodb mongodb-query nosql


    【解决方案1】:

    你非常接近:https://mongoplayground.net/p/HY1Pj0P4z12

    db.collection.aggregate([
      {
        $addFields: {
          "ownership.ownershipClientCode": {
            "$arrayElemAt": [
              "$clientIds.clientClusterCode",
              0
            ]
          }
        }
      }
    ])
    

    您可以在 $arrayElemAt 以及定义字段名称时使用点符号

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 2019-02-09
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多