Вы можете сделать это с помощью операции Aggregate .
db.yourCollectionName.aggregate(
[{
$group : {
_id : "$project",
"lockedCount" : {$sum : {
$cond: { if: "$locked", then: 1, else: 0 }
}},
"unlockedCount" : {$sum : {
$cond: { if: "$locked", then: 0, else: 1 }
}},
"totalCount" : {$sum : 1}
}
}]
)
Выход:
/* 1 */
{
"_id" : "XYZ",
"lockedCount" : 1.0,
"unlockedCount" : 1.0,
"totalCount" : 2.0
}
/* 2 */
{
"_id" : "DEF",
"lockedCount" : 0.0,
"unlockedCount" : 1.0,
"totalCount" : 1.0
}
/* 3 */
{
"_id" : "ABC",
"lockedCount" : 2.0,
"unlockedCount" : 0.0,
"totalCount" : 2.0
}
Обновлено
Если вы хотите переименовать _id
с помощью project
, то вы можете сделать это, используя $project
в конце операции $group
, например
db.yourCollectionName.aggregate(
[{
$group : {
_id : "$project",
"lockedCount" : {$sum : {
$cond: { if: "$locked", then: 1, else: 0 }
}},
"unlockedCount" : {$sum : {
$cond: { if: "$locked", then: 0, else: 1 }
}},
"totalCount" : {$sum : 1}
}
},
{
$project : {
_id : 0,
project : "$_id",
lockedCount : "$lockedCount",
unLockedCount : "$unlockedCount",
totalCount : "$totalCount"
}
}]
)
Выход:
/* 1 */
{
"project" : "XYZ",
"lockedCount" : 1.0,
"unLockedCount" : 1.0,
"totalCount" : 2.0
}
/* 2 */
{
"project" : "DEF",
"lockedCount" : 0.0,
"unLockedCount" : 1.0,
"totalCount" : 1.0
}
/* 3 */
{
"project" : "ABC",
"lockedCount" : 2.0,
"unLockedCount" : 0.0,
"totalCount" : 2.0
}