Reputation: 123
Iam new Mongodb developer i wrote mongodb aggregation.one of my field lampStatus : "OFF" is 30 recors are there iam using "{ $match: {lampStatus : "OFF"}}"i got 30 records but ' lampStatus : "OFF" 'there is no records iam getting Fetched 0 record(s) but how to get zero value in the above aggergation.
db.collection.aggregate([
{ $match:{'type':'L'}},
{ $match: {lampStatus : "ON"}},
{ $group: { _id : null, TotalLights: { $sum: 1 } } },
{ $project: { _id: 0, TotalLights: 1 } }
])
output:Fetched 0 record(s) in 0ms
expected outout:"TotalLights" : 0
Upvotes: 3
Views: 1583
Reputation: 46451
You can somewhat ridiculously do this with $facet
and $ifNull
aggregation
db.collection.aggregate([
{ "$facet": {
"array": [
{ "$match": { "type": "L", "lampStatus": "ON" }},
{ "$group": {
"_id": null,
"TotalLights": { "$sum": 1 }
}},
{ "$project": { "_id": 0, "TotalLights": 1 }}
]
}},
{ "$project": {
"TotalLights": {
"$ifNull": [{ "$arrayElemAt": ["$array.TotalLights", 0] }, 0 ]
}
}}
])
Upvotes: 7