gpt4 book ai didi

mongodb - 来自 MongoDB 中值的动态键

转载 作者:IT老高 更新时间:2023-10-28 13:30:32 25 4
gpt4 key购买 nike

假设我有这个:

{
"_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/

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