【发布时间】:2018-06-20 23:16:51
【问题描述】:
mongodb中是否可以统计多少个字段等于null?
我不是在询问一个字段(具有具体名称)在集合中为 null 的次数,而是在文档中询问有多少字段(通配符名称)等于 null。我想要得到的是整个集合中等于 null 的平均字段数。
【问题讨论】:
标签: mongodb mongodb-query
mongodb中是否可以统计多少个字段等于null?
我不是在询问一个字段(具有具体名称)在集合中为 null 的次数,而是在文档中询问有多少字段(通配符名称)等于 null。我想要得到的是整个集合中等于 null 的平均字段数。
【问题讨论】:
标签: mongodb mongodb-query
如果你有这样的数据:
:
*{"_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()
【讨论】:
您可以在 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]}}
}}
])
【讨论】: