Mongodb 如何在Mongo中获取布尔值文档的百分比
如果我在MongoDB中有一个文档集合,所有文档都有一个布尔值,那么我是否可以运行一个简单的函数来返回该值为真的文档百分比 也就是说,如果我所有的文档都是这样的:Mongodb 如何在Mongo中获取布尔值文档的百分比,mongodb,Mongodb,如果我在MongoDB中有一个文档集合,所有文档都有一个布尔值,那么我是否可以运行一个简单的函数来返回该值为真的文档百分比 也就是说,如果我所有的文档都是这样的: { _id: ObjectId("Blahblahblah"), someAttr: true, } 只有43%的集合具有someAttr的true值,是否有任何方法可以通过单个请求检索43%的数据,或者我必须向数据库发出两个请求,一个用于确定有多少是真的,另一个用于确定有多少是假的?不是一个简单的请求。但您
{
_id: ObjectId("Blahblahblah"),
someAttr: true,
}
只有43%的集合具有
someAttr
的true
值,是否有任何方法可以通过单个请求检索43%的数据,或者我必须向数据库发出两个请求,一个用于确定有多少是真的,另一个用于确定有多少是假的?不是一个简单的请求。但您可以通过聚合获得所有文档以及字段为true的所有文档的计数:
db.collection.aggregate([{
{ $group: {
_id: 1,
all_count: { $sum: 1 },
true_count: { $sum: { $cmp: [ "$someAttr", false ] } }
}
}
}]);
将这些计数转换成一个百分比是可能的,但使用MongoDB本身却不必要地复杂。我建议您在应用程序层执行此操作。如果您不介意性能,您可以通过这样的单个请求来执行此操作
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);
});
}