database - 在 MongoDB 中分组并添加到 Group
问题描述
我有一个MeterReadings
如下所示的集合。
{
"_id" : ObjectId("5fc768b33561870a262813c6"),
"installedAppId" : "A",
"readings" : [
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984662,
"u" : "W",
"v" : 100
}
]
}
{
"_id" : ObjectId("5fc768c73561870a262813c7"),
"installedAppId" : "B",
"readings" : [
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984662,
"u" : "W",
"v" : 200
}
]
}
{
"_id" : ObjectId("5fc768e43561870a262813c8"),
"installedAppId" : "A",
"readings" : [
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984672,
"u" : "W",
"v" : 300
}
]
}
我想要的输出是分组installedAppId
,然后readings
从所有匹配installedAppId
的条目中附加一个条目。下面显示的是我的目标。
{
"_id" : ObjectId("5fc768b33561870a262813c6"),
"installedAppId" : "A",
"readings" : [
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984662,
"u" : "W",
"v" : 100
},{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984672,
"u" : "W",
"v" : 300
}
]
}
{
"_id" : ObjectId("5fc768c73561870a262813c7"),
"installedAppId" : "B",
"readings" : [
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984662,
"u" : "W",
"v" : 200
}
]
}
Grouping byinstalledAppId
确实使用上面的数据返回两个组。
> db.MeterReadings.aggregate([ {$group: {_id: {installedAppId: "$installedAppId"}}} ])
{ "_id" : { "installedAppId" : "B" } }
{ "_id" : { "installedAppId" : "A" } }
由于每个读数都不同,尽管添加readings
为另一个条目$group
与查询整个数据库相同。
> db.MeterReadings.aggregate([ {$group: {_id: {installedAppId: "$installedAppId", readings: "$readings"}}} ]).pretty()
{
"_id" : {
"installedAppId" : "A",
"readings" : [
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984672,
"u" : "W",
"v" : 10.2
}
]
}
}
{
"_id" : {
"installedAppId" : "B",
"readings" : [
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984662,
"u" : "W",
"v" : 10.2
}
]
}
}
{
"_id" : {
"installedAppId" : "A",
"readings" : [
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984662,
"u" : "W",
"v" : 10.2
}
]
}
}
欢迎任何帮助!
解决方案
要么$push
或$addToSet
似乎可以解决问题,但是为每个添加数组。如果可以只推送到一个数组会更好。
addToSet
> db.MeterReadings.aggregate([{$group : {_id : "$installedAppId", readings: {$addToSet : "$readings"}}}]).pretty()
{
"_id" : "B",
"readings" : [
[
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984672,
"u" : "W",
"v" : 200
}
]
]
}
{
"_id" : "A",
"readings" : [
[
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984672,
"u" : "W",
"v" : 300
}
],
[
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984672,
"u" : "W",
"v" : 100
}
]
]
}
推
> db.MeterReadings.aggregate([{$group : {_id : "$installedAppId", readings: {$push: "$readings"}}}]).pretty()
{
"_id" : "B",
"readings" : [
[
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984672,
"u" : "W",
"v" : 200
}
]
]
}
{
"_id" : "A",
"readings" : [
[
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984672,
"u" : "W",
"v" : 100
}
],
[
{
"n" : "daf43d66-6c3b-4553-80af-6a0b1cf97418:power",
"t" : 1606902984672,
"u" : "W",
"v" : 300
}
]
]
}
推荐阅读
- vb.net - 比较两个数据表以查看哪些字段已更改
- python - 如何在函数中添加没有 slug 的对象
- python - 在 ipython 终端窗口中单击生成 MouseEvenType.MOUSE_DOWN 异常
- bash - 从命令行输入结果不正确
- babeljs - 我在使用 babel 为生产构建 Angular 应用程序时遇到问题
- go - Golang - smb2 模块 + 对 Golang 的基本了解
- delphi - Delphi DX 10.3 VS Delphi 6 性能
- java - 如何将现有的字符串数组转移到二维数组
- mysql - MySQL查找打开时间和关闭时间之间的记录
- excel - 在新创建的动态表上用零填充空白