Mongodb:有可能在一个查询中做到这一点吗



我是Mongodb的新手,下面是我的文档格式:

{
"_id": {
"$oid": "5ee023790a0e502e3a9ce9e7"
},
"data": {
"Quick": [
["1591745491", "4", "uwp"],
["1591745492", "4", "uwp"],
["1591745516", "12", "Word"],
["1591747346", "8", "uwp"]
]
"Key": [
["1591747446", "Num"]
]
"Search": [
["1591745491", "tty"],
["1591745492", "erp"],
["1591745516", "Word"],
["1591747346", "uwp"]
]
},
"devicecode": "MP1G5L9EMP1G5L9E@LENOVO"
}

我想做的是:

  • 按设备代码分组
  • 对于每组,计算他们使用";快速"键";以及";搜索";(数一下名字下面有多少行(

目前我正在使用python程序来完成这项工作。但我认为这应该是在Mongodb中完成这项工作的一种方式。

输出格式应该如下所示:

devicecode: MP1G5L9EMP1G5L9E@LENOVO, Quick: 400, key: 350, Search: 660
...

您可以使用聚合框架按设备计算$set阶段和$group阶段组中单个阵列的长度,同时将前一阶段计算的阵列长度值相加。最后,在$project阶段中,将_id映射到devicecode并取消选择_id

db.getCollection("testcollection").aggregate([
{
$set: {
QuickLen: {
$size: {
$ifNull: [
"$data.Quick",
[]
]
}
},
KeyLen: {
$size: {
$ifNull: [
"$data.Key",
[]
]
}
},
SearchLen: {
$size: {
$ifNull: [
"$data.Search",
[]
]
}
}
}
},
{
$group: {
_id: "$devicecode",
Quick: {
$sum: "$QuickLen"
},
key: {
$sum: "$KeyLen"
},
Search: {
$sum: "$SearchLen"
}
}
},
{
$project: {
devicecode: "$_id",
Quick: 1,
key: 1,
Search: 1,
_id: 0
}
}
])

相关内容

最新更新