对每个文档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'}}