Как считать экземпляры в 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
в них