Как считать экземпляры в MongoDB - PullRequest
0 голосов
/ 25 апреля 2018

Если я хочу суммировать числовые значения в MongoDB, я делаю это так:

totalOpenBalance: {
  $sum: "$openBalance"
} // sum up all "openBalance" values

Но мне интересно, какой оператор я использую, когда хочу суммировать экземпляры чего-либо?Скажите, если у меня есть свойство, такое как customer_id, и данные, которые выглядят следующим образом:

{
   "customer_id" : 445,
   "other_prop" : value
},
{
   "customer_id" : 446,
   "other_prop" : value
},

Обратите внимание, что я не хочу суммировать значения, присвоенные "customer_id", а скорее подсчитатьсколько экземпляров "customer_id" в сборе данных.Другими словами, согласно приведенным выше данным, я должен получить «2» в качестве результата.Какой оператор мне использовать для этого?

Чтобы уточнить, это шаг, который мне нужно добавить в конвейер агрегации, который я использую для генерации монго-представления.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Вы можете просто использовать find и $exists, а затем подсчитать возвращенные строки

db.collection.find( { customer_id: { $exists: true } } ).count()

Или, если вы хотите использовать агрегат (что я не думаю, что вы должны делать для такой простой задачи) вот как вы можете это сделать.

db.collection.aggregate({
    $match: {
        "customer_id": {
            $exists: true
        }
    }
}, {
    $group: {
        _id: null,
        "total": {
            $sum: 1
        } 
    }
})

Здесь свойство total даст вам количество экземпляров, содержащих customer_id в них

0 голосов
/ 26 апреля 2018

Любое из нижеперечисленного должно помочь вам:

Простой find:

db.collection.find({
    "customer_id": { $exists: true }
}).count()

Агрегируйте с $count:

db.collection.aggregate({
    $match: {
        "customer_id": { $exists: true }
    }
}, {
    $count: "numberOfInstances"
})

Агрегируйте с $group:

db.collection.aggregate({
    $match: {
        "customer_id": { $exists: true }
    }
}, {
    $group: {
        _id: null,
        "numberOfInstances": { $sum: 1 } // count instances
    }
})
...