如何找到类型数组的mongodb字段大小

时间:2014-04-01 08:34:48

标签: mongodb

我在mongodb中有一个名为location的集合。在位置,有一个名为proiList的字段,它是一个包含整数的数组。 地点 { LOCID:

proiList []:

}像这样....对于特定的locId我怎样才能找到proiList的长度(大小)?

1 个答案:

答案 0 :(得分:0)

您可以使用聚合框架。假设您有这样的文档。

{ "_id" : ObjectId("50987d7fa3c435bb040eb577"), "hobbies" : [  "bad",  "good",  "tier" ], "score" : 54.6535436362647, "student_id" : 0, "type" : "exam" }

我们想要计算学生的爱好数量,然后我们可以将查询写成:

db.grades.aggregate([{$match:{"_id":ObjectId("50987d7fa3c435bb040eb577")}},{$unwind:"$hobbies"},{$group:{_id:"$_id", number:{$sum:1}}}]);

结果:

{
"result" : [
    {
        "_id" : ObjectId("50987d7fa3c435bb040eb577"),
        "number" : 3
    }
],
"ok" : 1

}

其中number是爱好的总数。

Step1:db.grades.aggregate([{$ unwind:" $ hobbies"}])导致展开数组:

{
    "result" : [
        {
            "_id" : ObjectId("50906d7fa3c412bb040eb577"),
            "hobbies" : "bad",
            "score" : 54.6535436362647,
            "student_id" : 0,
            "type" : "exam"
        },
        {
            "_id" : ObjectId("50906d7fa3c412bb040eb577"),
            "hobbies" : "good",
            "score" : 54.6535436362647,
            "student_id" : 0,
            "type" : "exam"
        },
        {
            "_id" : ObjectId("50906d7fa3c412bb040eb577"),
            "hobbies" : "tier",
            "score" : 54.6535436362647,
            "student_id" : 0,
            "type" : "exam"
        }
    ],
    "ok" : 1
}

步骤:2我们按_id分组:" $ _ id"并为输出添加数字键,返回组中所有文档数的$ sum。

db.grades.aggregate([{$unwind:"$hobbies"},{$group:{_id:"$_id", number:{$sum:1}}}])

步骤3:将$ match匹配到您的查询到确切的文档,在您的情况下,它将是locId

db.grades.aggregate([{$match:{"_id":ObjectId("50987d7fa3c435bb040eb577")}},{$unwind:"$hobbies"},{$group:{_id:"$_id", number:{$sum:1}}}]);

因此文件数量为3个。