Подсчитать объекты внутри массива в каждом документе MongoDB - PullRequest
0 голосов
/ 30 апреля 2020

Мои документы организованы следующим образом:

{
        "_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'}
    }
  }
         ]

Подробно: мне нужно запустить это на pymon go.

Ответы [ 3 ]

1 голос
/ 30 апреля 2020

Вы можете использовать любой из следующих конвейеров агрегации. Вы получите размер поля массива points. Каждый конвейер использует свой подход, и выходные данные различаются, но информация о размере будет одинаковой.

Код работает с PyMon go:

pipeline = [
    { 
        "$unwind": "$points" 
    },
    { 
        "$group": { 
            "_id": { "vehicleid": "$vehicleid", "date": "$date" }, 
            "count": { "$sum": 1 } 
        }
    }
]

pipeline = [
  { 
      "$addFields": { "count": { "$size": "$points" } }
  }
]
1 голос
/ 30 апреля 2020

Вы должны использовать $sum для суммирования размера каждого массива следующим образом

  {
    "$group": {
      "_id": {
        "vehicleid": "$vehicleid",
        "date": "$date"
      },
      "count": { "$sum": { "$size": "$points" } }
    }
  }
0 голосов
/ 30 апреля 2020

Вы можете следовать этому коду

$group : {
       _id : {
        "vehicleid":"$vehicleid",
        "date":"$date"
         count: { $sum: 1 }
       }
    }
...