对每个文档MongoDB上的数组中的对象进行计数
我的文档是这样组织的:对每个文档MongoDB上的数组中的对象进行计数,mongodb,pymongo,Mongodb,Pymongo,我的文档是这样组织的: { "_id" : ObjectId("5ea899d7e7da54cabbc022e7"), "date" : ISODate("2018-01-27T00:00:00Z"), "vehicleid" : 32028, "points" : [ { "direction" : 225,
{
"_id" : ObjectId("5ea899d7e7da54cabbc022e7"),
"date" : ISODate("2018-01-27T00:00:00Z"),
"vehicleid" : 32028,
"points" : [
{
"direction" : 225,
"location" : {
"type" : "Point",
"coordinates" : [
-3.801898,
-38.501078
]
},
"odometer" : 134746396,
"routecode" : 0,
"speed" : 0,
"deviceid" : 148590,
"metrictimestamp" : ISODate("2018-01-27T23:32:03Z")
}
其中点是一个对象数组。我需要对这些文档进行分组,并返回每个数组中的元素数量。我猜是这样的:
pipe = [
{
'$project':{
"_id":0
}
},
{
'$group':{
"_id":{
"vehicleid":"$vehicleid",
"date":"$date"
},'count':{'$size':'points'}
}
}
]
详细信息:我需要在pymongo上运行此操作。您必须使用$sum来计算每个数组的大小,如下所示
{
$group:{
_身份证:{
vehicleid:$vehicleid,
日期:$日期
},
计数:{$sum:{$size:$points}
}
}
必须使用$sum对每个数组的大小求和,如下所示
{
$group:{
_身份证:{
vehicleid:$vehicleid,
日期:$日期
},
计数:{$sum:{$size:$points}
}
}
您可以按照此代码进行操作
您可以按照此代码进行操作
您可以使用以下任何聚合管道。您将获得点阵列字段的大小。每个管道使用不同的方法,输出细节不同,但大小信息相同 代码与PyMongo一起运行:
pipeline = [
{
"$unwind": "$points"
},
{
"$group": {
"_id": { "vehicleid": "$vehicleid", "date": "$date" },
"count": { "$sum": 1 }
}
}
]
pipeline = [
{
"$addFields": { "count": { "$size": "$points" } }
}
]
您可以使用以下任何聚合管道。您将获得点阵列字段的大小。每个管道使用不同的方法,输出细节不同,但大小信息相同 代码与PyMongo一起运行:
pipeline = [
{
"$unwind": "$points"
},
{
"$group": {
"_id": { "vehicleid": "$vehicleid", "date": "$date" },
"count": { "$sum": 1 }
}
}
]
pipeline = [
{
"$addFields": { "count": { "$size": "$points" } }
}
]
{'$size':'points'}应该是{'$size':'$points'}pymongo.errors.OperationFailure:未知组运算符'$size',返回此错误它应该是{'$count':{'$sum':'$points'}}{'$size:'points'}应该是{'$size size':'$points'}pymongo.errors.OperationFailure:未知组运算符'$size返回此错误它应该是{'count':{'sum':{'size':'points'}}