mongodb - 来自 MongoDB 中值的动态键

标签 mongodb mongodb-query

假设我有这个:

{
        "_id" : "ENVD",
        "years" : [
                {
                        "year" : "2013",
                        "avgInstructor" : 5.144999999999998
                },
                {
                        "year" : "2012",
                        "avgInstructor" : 5.194436090225564
                }
        ]
}

我需要能够找到 2012-13 年 avgInstructor 字段的差异。我在想我可以使用 $project 以某种方式转换键,这将使年份成为键,而 avgInstructor 评级是值。所以它看起来像这样:

{
        "_id" : "ENVD",
        "years" : {
                        "2013" : 5.144999999999998,
                        "2012" : 5.194436090225564
         }

}

这可能吗?请记住,我的主要目标是能够像这样的伪代码运行减法:years['2013'].avgInstructor - years['2013'].avgInstructor。因此,如果您看到更简单的方法,那也很棒。我不确定在聚合管道的上下文中解决此问题的最佳方法。有人可以帮忙吗?

最佳答案

对于最终在这里寻找解决方案以在更新版本的 MongoDB 中使用聚合将数组转换为对象的人:

MongoDB 3.4.4 引入 $arrayToObject

你必须 $map

  {
    $set: {
      years: {
        $map: {
          input: "$years",
          as: "year",
          in: [
            "$$year.year",
            "$$year.avgInstructor"
          ]
        }
      }
    }
  }

变成这样

{
  "_id" : "ENVD",
  "years": [
    ["2013", 5.144999999999998],
    ["2012", 5.194436090225564]
  ]
}

然后使用 $arrayToObject

  {
    $set: {
      years: {
        $arrayToObject: "$years"
      }
    }
  }

或者将这两个步骤结合在一起

  {
    $set: {
      years: {
        $arrayToObject: {
          $map: {
            input: "$years",
            as: "year",
            in: [
              "$$year.year",
              "$$year.avgInstructor"
            ]
          }
        }
      }
    }
  }

关于mongodb - 来自 MongoDB 中值的动态键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28033014/

相关文章:

javascript - 最快的 JavaScript 重定向

mongodb - 在mongo聚合中将ObjectID转换为字符串

MongoDB $project : $filter sub-array

javascript - 更新使用 Mongoose 模型检索并作为 promise 处理的文档时出现问题

android - 如何避免 RecyclerView - Android 中的数据重复?

javascript - Mongoose 数组返回空?

javascript - 如何在 Mongoose 中检索子文档

javascript - Mongoose DBrefs - 转换为 ObjectId 值失败

node.js - MongoDB 查询两个集合以添加/减去第一个集合中的字段与第二个集合中的匹配字段

c# - mongoDB upsert 数组