如果我在MongoDB中有一个文档集合都有一个布尔值,那么我可以运行一个简单的单一函数来返回该值为真的文档的百分比吗?
也就是说,如果我的所有文档看起来像这样:
{
_id: ObjectId("Blahblahblah"),
someAttr: true,
}
并且只有43%的集合有true
的{{1}}值,有没有办法通过一个请求检索43%的数字,或者我必须做两个请求DB,一个确定有多少是真的,一个确定有多少是假的?
答案 0 :(得分:2)
不是一个简单的。但是您可以通过聚合计算所有文档和字段为真的所有文档:
db.collection.aggregate([{
{ $group: {
_id: 1,
all_count: { $sum: 1 },
true_count: { $sum: { $cmp: [ "$someAttr", false ] } }
}
}
}]);
将这些计数转换为百分比是可能的,但与MongoDB本身不必要地复杂化。我建议你在应用层进行。
答案 1 :(得分:0)
如果您不介意表演,可以通过这样的单一请求来完成。
function getPercentage(callback)
{
var trues = 0;
var total = 0;
var docs = db.collection.find();
docs.forEach(function(doc) {
total++;
if(doc.someAttr)
trues++;
if(total == docs.length)
callback(trues/total * 100);
});
}