mongodb:使用参数在新字段中动态分配值

埃尔汉南·史瓦兹(Elhanan Schwarts)

假设在聚合阶段收到以下集合:

{
    customer: "WN",
    parameter: "category_a",
    locations: [ 
        {
            city: "Elkana", 
            category_a: 11904.0, 
            category_b: 74.0,
            category_c: 657.0,
        }, 
        {
            city: "Haifa",
            category_a: 20.0,
            category_b: 841.0,
            category_c: 0,
        }
    ]
}
{
    customer: "QKD",
    parameter: "category_b",
    locations: [ 
        {
            city: "Tel Aviv", 
            category_a: 0, 
            category_b: 22.0,
            category_c: 612.0,
        }
}
{
....
}

parameter字段中的值引用嵌套文档中的字段名称。

在下一阶段,我想在每个嵌套文档中创建一个新字段(我将其称为category),并在嵌套文档字段中分配一个值(的值category_a或的值category_b或的值category_c)。将使用该字段中的值来选择将从哪个字段中获取值parameter

结果可能如下所示:

{
    customer: "WN",
    parameter: "category_a",
    locations: [ 
        {
            city: "Elkana", 
            category_a: 11904.0, 
            category_b: 74.0,
            category_c: 657.0,
            category: 11904.0
        }, 
        {
            city: "Haifa",
            category_a: 20.0,
            category_b: 841.0,
            category_c: 0,
            category: 20.0
        }
    ]
}
{
    customer: "QKD",
    parameter: "category_b",
    locations: [ 
        {
            city: "Tel Aviv", 
            category_a: 0, 
            category_b: 22.0,
            category_c: 612.0,
            category: 22.0
        }
    ]
}
{
....
}
土生的

您可以尝试使用$map$reduce

db.collection.aggregate([
  {
    $addFields: {
      locations: {
        $map: {
          input: "$locations",
          as: "l",
          in: {
            $reduce: {
              input: { $objectToArray: "$$l" },
              initialValue: "$$l",
              in: {
                $cond: [
                  { $eq: ["$$this.k", "$parameter"] },
                  { $mergeObjects: ["$$value", { category: "$$this.v" }] },
                  "$$value"
                ]
              }
            }
          }
        }
      }
    }
  }
])

操场

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

动态分配字段

来自分类Dev

如何使用在Logic App中的HTTP请求中传递的值/如何为Logic App参数动态分配值

来自分类Dev

从链表中删除值/删除未动态分配的值

来自分类Dev

在SSIS中为变量动态分配值

来自分类Dev

从动态分配的数组中调用值

来自分类Dev

在动态分配的矩阵中输入值 - C

来自分类Dev

动态分配值给MVC中的提交按钮

来自分类Dev

使用Xquery动态分配值以选择标签

来自分类Dev

结构中的动态分配

来自分类Dev

使用结构中的成员进行动态分配

来自分类Dev

使用malloc在C中动态分配内存

来自分类Dev

如何动态分配参数值

来自分类Dev

动态分配地图指针值

来自分类Dev

c ++动态分配初始值

来自分类Dev

动态分配唯一值-Python

来自分类Dev

如何在mongodb中全局更新字段值

来自分类Dev

在Python中,动态分配字典条目

来自分类Dev

在pascal中动态分配匿名函数

来自分类Dev

C ++中的动态分配数组

来自分类Dev

在动态分配的矩阵中读取错误

来自分类Dev

释放C中动态分配的内存

来自分类Dev

在类中动态分配向量

来自分类Dev

C ++中的动态分配错误

来自分类Dev

在C中动态分配线程

来自分类Dev

C ++中的动态分配数组

来自分类Dev

在QT中释放动态分配的内存

来自分类Dev

在结构中动态分配**指针

来自分类Dev

在Node JS中动态分配端口

来自分类Dev

在C中动态分配内存