【问题标题】:How to get percentage of boolean value documents in Mongo如何在 Mongo 中获取布尔值文档的百分比
【发布时间】:2015-06-29 21:17:56
【问题描述】:

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

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

{    
    _id: ObjectId("Blahblahblah"),
    someAttr: true,
}

只有 43% 的集合总数的 true 值为 someAttr,有没有办法通过单个请求检索 43% 的数字,或者我必须向数据库发出两个请求,一个判断多少是真的,一个判断多少是假的?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    不是一个简单的。但是您可以通过聚合获得所有文档和字段为真的所有文档的计数:

    db.collection.aggregate([{
        { $group: {
             _id: 1,
             all_count: { $sum: 1 },
             true_count: { $sum: { $cmp: [ "$someAttr", false ] } }
          }
        }
    }]);
    

    将这些计数转换为百分比是可能的,但对 MongoDB 本身来说不必要地复杂。我建议你在应用层上做。

    【讨论】:

      【解决方案2】:

      如果您不介意表演,您可以通过这样的单个请求来完成。

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

      【讨论】:

        猜你喜欢
        • 2021-11-29
        • 2012-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-06
        • 1970-01-01
        相关资源
        最近更新 更多