mongodb - mongoDB组不同值和返回数组的组合
问题描述
我的数据库在 MongoDB 4.4 版中,我正在使用 pymongo 来获取数据。假设我有一个 MongoDB 集合,如下所示:
{
"_id":1,
"device":{"deviceId":'A1',"deviceName":'Some_device'},
"location":{"latitude":12.3456,"longitude":-78.9}
}
{
"_id":2,
"device":{"deviceId":'A2',"deviceName":'Some_other_device'},
"location":{"latitude":12.3456,"longitude":-78.9}
}
{
"_id":3,
"device":{"deviceId":'A1',"deviceName":'Some_device'},
"location":{"latitude":11.1111,"longitude":-55.5555}
}
{
"_id":4,
"device":{"deviceId":'B1',"deviceName":'New_device'},
"location":{"latitude":12.3456,"longitude":-55.5555}
}
对于纬度和经度的每个唯一组合,我需要对应资产的数组,如下所示:
{
"location":{"latitude":12.3456,"longitude":-78.9},
{"device": "deviceId":['A1','A2'], "deviceName":['Some_device','Some_other_device']}
}
{
"location":{"latitude":11.1111,"longitude":-55.5555},
{"device": "deviceId":['A1'], "deviceName":['Some_device']}
}
{
"location":{"latitude":12.3456,"longitude":-55.5555},
{"device": "deviceId":['B1'], "deviceName":['New_device']}
}
我尝试一次获取所有数据并执行操作。但是集合太大而无法响应。无论如何我可以通过查询操作获得结果吗?
解决方案
您可以通过聚合来实现这一点
在这里工作的游乐场
db.collection.aggregate([
{
"$group": {
"_id": {
latitude: "$location.latitude",
longitude: "$location.longitude"
},
"deviceId": {
"$addToSet": "$device.deviceId"
},
"deviceName": {
"$addToSet": "$device.deviceName"
}
}
},
{
"$project": {
_id: 0,
location: {
latitude: "$_id.latitude",
longitude: "$_id.longitude"
},
device: {
deviceId: "$deviceId",
deviceName: "$deviceName"
}
}
}
])