Как считать экземпляры в MongoDB

Если я хочу суммировать числовые значения в 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 ответа

Решение

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

просто 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
    }
})

Вы можете просто использовать 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 в них

Другие вопросы по тегам