mongodb - Mongo 在 $group 阶段添加新的键值对
问题描述
我有一系列文件,例如:
{
"tagName": "Tag1",
"value": 1,
"ts": "2020/01/01 20:00"
},
{
"tagName": "Tag2",
"value": 2,
"ts": "2020/01/01 20:00"
},
{
"tagName": "Tag3",
"value": 3,
"ts": "2020/02/01 20:00"
}
我想对文档进行分组并对ts
and 进行字典tagName
化value
。所以意图输出是:
[
{
"Tag1": 1
"Tag2": 2,
"ts": "2020/01/01 20:00"
},
{
"Tag3": 3,
"ts": "2020/02/01 20:00"
}
]
我尝试了以下管道:
{
$group: {
'_id': '$ts',
'output': {
$push: {
'$t': '$v'
}
}
}
}
谢谢你的帮助!
解决方案
当$group
by时ts
,您应该将tagName
and添加value
到一个数组 -> 将其转换回tagName: value
by$arrayToObject
然后将其合并回 root 以获得您的预期结果。
db.collection.aggregate([
{
$group: {
_id: "$ts",
"tags": {
"$push": {
"k": "$tagName",
"v": "$value"
}
}
}
},
{
$project: {
"ts": "$_id",
"tagsObj": {
"$arrayToObject": "$tags"
}
}
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
_id: "$_id",
},
"$tagsObj"
]
}
}
}
])
推荐阅读
- php - 获取最大值和最小值,如果值相同,则只打印一个值,Laravel Blade
- flutter - 创建始终固定在底部的文本输入栏
- python - 在python中用字典键替换值
- javascript - 图像交换 - 未捕获的类型错误:无法将属性“src”设置为 null
- c++ - 有人可以为我解释一下 C++ 代码吗?
- server - 有没有办法通过pid在HP-UX中获取环境变量
- php - PHP准备语句从SQL数据库查询(GET)数据并在while循环中发布在网页上?
- python - 如何在 Kivy 中将纹理绑定到 3D 网格?
- mysql - SQL 查询最小化器:CREATE + ALTER => CREATE
- javascript - 在 asp.net 内容页面和转发器控件中使用 jquery 日期时间选择器