如何在mongodb中查找具有数组数据类型的字段?

时间:2015-12-17 06:34:45

标签: mongodb mongodb-query

我的要求是找到字段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()

我没有得到任何价值观。 感谢。

1 个答案:

答案 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