我在mongodb中有一个名为location的集合。在位置,有一个名为proiList的字段,它是一个包含整数的数组。 地点 { LOCID:
proiList []:
}像这样....对于特定的locId我怎样才能找到proiList的长度(大小)?
答案 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个。