我有一个带有“传感器”的集合,每个传感器看起来像:
{
"_id" : ObjectId("5c3bfc66b5594738c8016d12"),
"parentDeviceID" : ObjectId("5c3b9aa0b559471f1088c5e1"),
"sn" : 2,
}
我想获取属于特定parentDeviceID的序列号(“ sn”)列表:
sensorList = list(self._dbC.sensorsCol.find({'parentDeviceID':parentDeviceID}, {'sn': 1, '_id':0}))
print(type(sensorList))
print(sensorList)
但是我得到了字典列表:
[{'sn': 1}, {'sn': 2}, {'sn': 3}]
我想得到:
[1,2,3]
答案 0 :(得分:1)
这是通过服务器端聚合来实现的方法:
db.sensors.aggregate({"$group":{"_id":null,"sn":{"$push":"$sn"}}})
这将为您提供一个文档,如下所示:
{ "_id" : null, "sn" : [1, 2, 3] }
从中提取数组应该很简单。
$group
上方的_id:null
表示它为集合中的所有文档构造了一个单独的组。 $push
聚合器构造该组中所有sn
值的数组。请注意,文档大小限制为16 MB,因此,如果您的传感器ID列表可能变得更大,则可能需要其他客户端解决方案。