gpt4 book ai didi

MongoDB 聚合 : Add each array value to each object inside array from another field. 合并/组合来自不同字段的两个数组

转载 作者:行者123 更新时间:2023-12-04 13:15:12 24 4
gpt4 key购买 nike

我正处于复杂的聚合查询(具有查找和许多组/展开阶段)的中间,遇到了组合来自不同领域的两个不同数组的问题。

至于现在,在其中一个阶段(在我的大查询的中间或查找之后)之后,我有以下输出:

{
_id: 1,
quantity: [2, 1, 3]
reagents: [
{name: "FirstItem", other_field: ... },
{name: "SecondItem", other_field: ... },
{name: "ThirdItem", other_field: ... }
]
}

而且我要:
  _id: 1,
reagents: [
{name: "FirstItem", quantity: 2 },
{name: "SecondItem", quantity: 1 },
{name: "ThirdItem", quantity: 3 }
]

所以每个 [quantity]我想添加到 [reagents] 中的每个对象的值作为根据其索引的字段,例如第一个 {object}reagents应该先 element来自 [quantity]
带有数组索引的架构):
quantity: [2, 1, 3, ... n]
↓ ↓ ↓ ↓
reagents: [1, 2, 3, ... n]

THE PROBLEM:



我不能在聚合之后或之前这样做,因为:
  • 我没有必要的数据,因为它是从不同集合中查找的结果。
  • 我不能这样做,因为在这之后,我应该$group另一个字段的数据,所以 [reagents]排序顺序已丢失且无法恢复。

  • UPD :我知道我可以(并且可能应该使用 $unwind stage for [reagents] 但我还没有找到 any relevant Aggregation Stage Operators in Mongo Manual 。所以如果你知道一个必要的,请指出我。

    最佳答案

    您可以添加以下阶段

     { "$addFields": {
    "reagents": {
    "$map": {
    "input": { "$range": [0, { "$size": "$reagents" }] },
    "in": {
    "name": {
    "$arrayElemAt": ["$reagents.name", "$$this"]
    },
    "quantity": {
    "$arrayElemAt": ["$quantity", "$$this"]
    }
    }
    }
    }
    }}

    MongoPlayground

    关于MongoDB 聚合 : Add each array value to each object inside array from another field. 合并/组合来自不同字段的两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61185899/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com