Mongodb 如何在Mongo中获取布尔值文档的百分比

Mongodb 如何在Mongo中获取布尔值文档的百分比,mongodb,Mongodb,如果我在MongoDB中有一个文档集合,所有文档都有一个布尔值,那么我是否可以运行一个简单的函数来返回该值为真的文档百分比 也就是说,如果我所有的文档都是这样的: { _id: ObjectId("Blahblahblah"), someAttr: true, } 只有43%的集合具有someAttr的true值,是否有任何方法可以通过单个请求检索43%的数据,或者我必须向数据库发出两个请求,一个用于确定有多少是真的,另一个用于确定有多少是假的?不是一个简单的请求。但您

如果我在MongoDB中有一个文档集合,所有文档都有一个布尔值,那么我是否可以运行一个简单的函数来返回该值为真的文档百分比

也就是说,如果我所有的文档都是这样的:

{    
    _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);
  });
}