【问题标题】:Count null fields in mongodb计算 mongodb 中的空字段
【发布时间】:2018-06-20 23:16:51
【问题描述】:

mongodb中是否可以统计多少个字段等于null?

我不是在询问一个字段(具有具体名称)在集合中为 null 的次数,而是在文档中询问有多少字段(通配符名称)等于 null。我想要得到的是整个集合中等于 null 的平均字段数。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    如果你有这样的数据:

    :

    *{"_id":{"$oid":"572bb8222b288919b68adfa5"},
    "tripduration":null,
    "start station id":279,
    "start station name":"Peck Slip & Front St",
    "end station id":268,
    "end station name":"Howard St & Centre St",
    "bikeid":22820,
    "usertype":"Customer",
    "birth year":"","gender":0,
    ....
    ...
    

    你可以用这段代码解决问题:

    db.collection.find({$and: [{tripduration: null}, {tripduration: {$exists: true}}]}).count()
    

    【讨论】:

      【解决方案2】:

      您可以在 3.4 中尝试以下聚合

      $objectToArray 返回文档中的所有键和值对,然后 $unwind 将每个文档展平为多个文档,每个文档带有一个键值对,$group 在整个集合中检查所有字段值是否为空和$sum 来累积值。

      $cond 带有查询条件,当 null 时输出 1,否则输出 0。$$ROOT 访问整个文档。

      db.col.aggregate([
        {"$project":{
        "arrayofkeyvalue":{"$objectToArray":"$$ROOT"}
        }},
        {"$unwind":"$arrayofkeyvalue"},
        {"$group":{
          "_id":null,
          "count":{"$sum":{"$cond":[{"$eq":["$arrayofkeyvalue.v",null]},1,0]}}
        }}
      ])
      

      【讨论】:

      • 谢谢,我已经尝试过了,mongod 3.4.1 报告了以下消息 "Unrecognized expression '$objectToArray'" 。我尝试了一个更简单的查询: db.coll.aggregate([{"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}]) 并且错误是相同的。有什么想法吗?
      • 不客气。是的,您可以尝试最新的 3.4 吗?从 3.4.4 开始提供 ObjectToArray
      猜你喜欢
      • 2014-10-15
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2016-05-26
      • 2013-09-01
      • 1970-01-01
      相关资源
      最近更新 更多