我有一个问题,我认为它会经常发生,但我无法找到足够的信息在我的研究。
我的问题是,我期望查询的返回具有给定的JSON格式,但是当匹配过滤掉所有文档时,我没有得到json。
一个简单的例子:我希望统计与给定条件匹配的文档,因此我有以下查询
db.collection.aggregate( [{
$match: {
type: /^1[.]2[.]3[.].*$/
}
}, {
$group: {
_id: {$ifNull : ["$type", 0]},
count: { $sum: 1 }
}
}]);
如果至少有一个文档匹配,则查询有效:
{ "_id" : "1.2.3", "count" : 44 }
如果我没有文档,我希望收到这样的json:
{ "_id" : "1.5.3", "count" : 0 }
这可能吗?
ps:这是一个简化的情况,在应用程序端处理它并不容易,所以我宁愿尝试调整我的查询
1条答案
按热度按时间bjp0bcyl1#
如果您事先知道要搜索的键的值(例如
1.2.3
,在您的情况下为1.5.3
),下面是使用$facet
的一个变通方法。它首先尝试通过$match
获取文档,并将它们存储到名为results
的数组中。我们用$group
结果替换它(当我们有匹配的记录时);或将其替换为默认计数:0记录与您指定的键。Mongo Playground