动态字段数组到单个对象mongo db

发布于 2025-02-09 09:51:45 字数 2025 浏览 2 评论 0原文

我的蒙哥集合如下所示,

{
   "_id" : ObjectId("62aeb8301ed12a14a8873df1"),
   "Fields" : [ 
    {
        "FieldId" : "e8efd0b0-9d10-4584-bb11-5b24f189c03b",
        "Value" : [ 
            "test_123"
        ]
    }, 
    {
        "FieldId" : "fa6745c2-b259-4a3b-8c6f-19eb78fbbbf5",
        "Value" : [ 
            "123"
        ]
    }, 
    {
        "FieldId" : "2a1be5d0-8fb6-4b06-a253-55337bfe4bcd",
        "Value" : []
    }, 
    {
        "FieldId" : "eed12747-0923-4290-b09c-5a05107f5609",
        "Value" : [ 
            "234234234"
        ]
    },        
    {
        "FieldId" : "fe41d8fb-fa18-4fe5-b047-854403aa4d84",
        "Value" : [ 
            "Irrelevan"
        ]
    }, 
    {
        "FieldId" : "93e46476-bf2e-44eb-ac73-134403220e9e",
        "Value" : [ 
            "test"
        ]
    }, 
    {
        "FieldId" : "db434aca-8df3-4caf-bdd7-3ec23252c2c8",
        "Value" : [ 
            "2019-06-16T18:30:00.000Z"
        ]
    }, 
    {
        "FieldId" : "00df903f-5d59-41c1-a3df-60eeafb77d10",
        "Value" : [ 
            "tewt"
        ]
    }, 
    {
        "FieldId" : "e97d0386-cd42-6277-1207-e674c3268cec",
        "Value" : [ 
            "1"
        ]
    },
    {
        "FieldId" : "35e55d27-7d2c-467d-8a88-09ad6c9f5631",
        "Value" : [ 
            "10"
        ]
    }
  ]
 }

这是所有动态表单字段。 因此,我想查询并获得结果喜欢以下对象,

{
    "_id" : ObjectId("62aeb8301ed12a14a8873df1"),
    "e8efd0b0-9d10-4584-bb11-5b24f189c03b": ["test_123"],
    "fa6745c2-b259-4a3b-8c6f-19eb78fbbbf5": ["123"],
    "2a1be5d0-8fb6-4b06-a253-55337bfe4bcd": [],
    "eed12747-0923-4290-b09c-5a05107f5609": ["234234234"],
    "fe41d8fb-fa18-4fe5-b047-854403aa4d84": ["Irrelevan"],
    "93e46476-bf2e-44eb-ac73-134403220e9e":["test"],
    "db434aca-8df3-4caf-bdd7-3ec23252c2c8":["2019-06-16T18:30:00.000Z"],
    "00df903f-5d59-41c1-a3df-60eeafb77d10":["1"]
 }

我希望最终输出像Fields fields的这种组合。FieldId应该是键,字段。值得在这里值得。

请尝试帮助我形成上面的对象。

提前致谢!

I am having mongo collection like below,

{
   "_id" : ObjectId("62aeb8301ed12a14a8873df1"),
   "Fields" : [ 
    {
        "FieldId" : "e8efd0b0-9d10-4584-bb11-5b24f189c03b",
        "Value" : [ 
            "test_123"
        ]
    }, 
    {
        "FieldId" : "fa6745c2-b259-4a3b-8c6f-19eb78fbbbf5",
        "Value" : [ 
            "123"
        ]
    }, 
    {
        "FieldId" : "2a1be5d0-8fb6-4b06-a253-55337bfe4bcd",
        "Value" : []
    }, 
    {
        "FieldId" : "eed12747-0923-4290-b09c-5a05107f5609",
        "Value" : [ 
            "234234234"
        ]
    },        
    {
        "FieldId" : "fe41d8fb-fa18-4fe5-b047-854403aa4d84",
        "Value" : [ 
            "Irrelevan"
        ]
    }, 
    {
        "FieldId" : "93e46476-bf2e-44eb-ac73-134403220e9e",
        "Value" : [ 
            "test"
        ]
    }, 
    {
        "FieldId" : "db434aca-8df3-4caf-bdd7-3ec23252c2c8",
        "Value" : [ 
            "2019-06-16T18:30:00.000Z"
        ]
    }, 
    {
        "FieldId" : "00df903f-5d59-41c1-a3df-60eeafb77d10",
        "Value" : [ 
            "tewt"
        ]
    }, 
    {
        "FieldId" : "e97d0386-cd42-6277-1207-e674c3268cec",
        "Value" : [ 
            "1"
        ]
    },
    {
        "FieldId" : "35e55d27-7d2c-467d-8a88-09ad6c9f5631",
        "Value" : [ 
            "10"
        ]
    }
  ]
 }

This is all dynamic form fields.
So I want to query and get result like to below object,

{
    "_id" : ObjectId("62aeb8301ed12a14a8873df1"),
    "e8efd0b0-9d10-4584-bb11-5b24f189c03b": ["test_123"],
    "fa6745c2-b259-4a3b-8c6f-19eb78fbbbf5": ["123"],
    "2a1be5d0-8fb6-4b06-a253-55337bfe4bcd": [],
    "eed12747-0923-4290-b09c-5a05107f5609": ["234234234"],
    "fe41d8fb-fa18-4fe5-b047-854403aa4d84": ["Irrelevan"],
    "93e46476-bf2e-44eb-ac73-134403220e9e":["test"],
    "db434aca-8df3-4caf-bdd7-3ec23252c2c8":["2019-06-16T18:30:00.000Z"],
    "00df903f-5d59-41c1-a3df-60eeafb77d10":["1"]
 }

I want final output like this combination of fields Fields.FieldID should be key and Fields.Value should be value here.

Please try to help to me to form the object like above.

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

相对绾红妆 2025-02-16 09:51:45

您可以使用 $ arraytoObject ,然后使用使用,然后使用作为新的root $ reploceroot

db.collection.aggregate([
  {
    $match: {
      // your query here
    }
  },
  {
    $project: {
      newRoot: {
        "$arrayToObject": {
          $map: {
            input: "$Fields",
            in: {
              k: "$this.FieldId",
              v: "$this.Value"
            }
          }
        }
      }
    }
  },
  {
    "$replaceRoot": {
      "newRoot": {
        "$mergeObjects": [
          "$newRoot",
          {
            _id: "$_id"
          }
        ]
      }
    }
  }
])

mongo Playground

You can restructure your objects using $arrayToObject, then using that value to as a new root $replaceRoot like so:

db.collection.aggregate([
  {
    $match: {
      // your query here
    }
  },
  {
    $project: {
      newRoot: {
        "$arrayToObject": {
          $map: {
            input: "$Fields",
            in: {
              k: "$this.FieldId",
              v: "$this.Value"
            }
          }
        }
      }
    }
  },
  {
    "$replaceRoot": {
      "newRoot": {
        "$mergeObjects": [
          "$newRoot",
          {
            _id: "$_id"
          }
        ]
      }
    }
  }
])

Mongo Playground

記憶穿過時間隧道 2025-02-16 09:51:45

我尝试一下并像您想要

 db.collection.aggregate([{
    $replaceWith: {
      $mergeObjects: [
        {
          _id: "$_id"
        },
        {
          $arrayToObject: { $zip: {inputs: ["$Fields.FieldId","$Fields.Value"]}}
        }
      ]
    }
    }])

Playground

I try this and get result like you want

 db.collection.aggregate([{
    $replaceWith: {
      $mergeObjects: [
        {
          _id: "$_id"
        },
        {
          $arrayToObject: { $zip: {inputs: ["$Fields.FieldId","$Fields.Value"]}}
        }
      ]
    }
    }])

playground

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文