我的要求是找到字段c中包含数组的记录数。 我的文档数据如下:
{ "_id" : ObjectId("5600c13c42e8973b2f4c0f36"), "a" : 4000, "b" : 2240, "c" : 2140 }
{ "_id" : ObjectId("5600c40642e8973b2f4c0f37"), "a" : 4000, "b" : 42240, "c" : 2140 }
{ "_id" : ObjectId("5600c40942e8973b2f4c0f38"), "a" : 4000, "b" : 422240, "c" : 2140 }
{ "_id" : ObjectId("5600c44242e8973b2f4c0f39"), "a" : 4000, "b" : 422240, "c" : 2140 }
{ "_id" : ObjectId("56705c8cdaa8726c495fbdd9"), "d" : "f", "a" : "amm" }
{ "_id" : ObjectId("56705c97daa8726c495fbdda"), "d" : "qf" }
{ "_id" : ObjectId("5670b481a39d0dd706ec9a3c"), "a" : 21, "d" : 9 }
{ "_id" : ObjectId("56724f8e3e075703065e3988"), "a" : 3, "b" : 5, "c" : ["m", "n", 3 ] }
{ "_id" : ObjectId("56724f983e075703065e3989"), "a" : 3, "b" : 5, "c" : ["m", "n", "3" ] }
预期输出为2。
我试过
db.fun.find({c:{$type:4}}).count()
我没有得到任何价值观。 感谢。
答案 0 :(得分:1)
根据您的输入集合,您可以使用如下查询:
db.fun.find({'c.0':{$exists:true}}).count()
请注意,如果您的收藏集中包含
文档{"a" : 4000, "b" : 2240, "c": {"0": 222, "1", 333}}
查询失败,因为它也会检索此文档。
为了在所有情况下正确工作,您必须使用以下形式的查询:
db.fun.find({ $where : "Array.isArray(this.c)" }).count()
使用上述查询的问题是,使用$ where的查询需要完整的集合扫描并使用服务器端JavaScript。如果您打算使用此功能,请确保禁用服务器端JavaScript。
参考:https://docs.mongodb.org/v3.0/reference/operator/query/type/#querying-by-data-type