arrays - 值如何成为 MonogoDB 数组中的键值?
问题描述
说明:我想将值转换为键的一部分,在文档 1 中 "xyz"
替换为 v
,在文档 2 中,"abc"
替换为v
。
注意:有多个文档,我不知道文档 3“sig_nam”的值是什么。
1号文件
"sig_nam": "xyz",
"cont_name": "1",
"t_v": [
{
"t": "2020-11-20T03:00",
"v": 0
},
{
"t": "2020-10-25T03:00",
"v": 0
}
]
}
2号文件
{
"sig_nam": "abc",
"cont_name": "1",
"t_v": [
{
"t": "2020-11-20T03:00",
"v": 0
},
{
"t": "2020-10-25T03:00",
"v": 0
}
]
}
预期输出文件 1
"sig_nam": "xyz",
"cont_name": "1",
"t_v": [
{
"t": "2020-11-20T03:00",
"xyz": 0
},
{
"t": "2020-10-25T03:00",
"xyz": 0
}
]
}
预期产出 2 号文件
{
"sig_nam": "abc",
"cont_name": "1",
"t_v": [
{
"t": "2020-11-20T03:00",
"abc": 0
},
{
"t": "2020-10-25T03:00",
"abc": 0
}
]
}
解决方案
$map
t_v
迭代数组的循环$arrayToObject
, 设置k
为sig_nam
andv
as count and same fort
, 包裹到数组括号中,它将转换为对象
db.collection.aggregate([
{
$addFields: {
t_v: {
$map: {
input: "$t_v",
in: {
$arrayToObject: [[
{ k: "t", v: "$$this.t" },
{ k: "$sig_nam", v: "$$this.v" }
]]
}
}
}
}
}
])
推荐阅读
- amazon-web-services - 提高缓存命中率 Cloudfront
- azure - Azure API 管理 OAuth2 配置 - 创建授权服务和 ClientID/Secret
- perl - 现在在 indent2tree 中禁止对标量进行实验性推送
- url - encodeURIComponent 与 URLSearchParams 的不同输出
- javascript - 在 p5.js 的处理中,如何使圆的半径在更大和更小的半径之间交替?
- node.js - 类型错误:defineCall 不是函数
- python - 将更改的文本按钮状态保存回字典值列表索引 0
- flutter - 文字溢出动画
- reactjs - 边框半径在本机反应中不圆角
- python - Python使用多个术语来查找