[英]How to query mongoDB with the “find”
我有这个问题。 我在mongoDB中有以下数据库:
{
"_id" : ObjectId("585fe33d3c63b4a81e00002b"),
"class" : [
{
"name" : "class 1",
"people" : [
{
"id" : "58596",
"name" : "mark",
},
{
"id" : "45643",
"name" : "Susan",
},
{
"id" : "85952",
"name" : "Loris",
}
},
{
"name" : "class 2",
"people" : [
{
"id" : "58456",
"name" : "Sissi",
},
{
"id" : "45643",
"name" : "Susan",
}
]
}
]
}
我使用php,我想知道内部具有特定名称的类的名称,并将其保存在数组中。
例如,如果我选择Susan,我希望有一个带有["class 1" , ["class 2"]
的数组。
我使用过findOne,但是这次我需要使用find。
您可以使用MongoDB聚合框架 。
这是一个查询,它将以所需的形式为您提供日期。 但是,我相信会有一些更好,更有效的方法来解决此问题,但这就是我想出的。
db.collection.aggregate([
{"$unwind":"$class"},
{"$unwind":"$class.people"},
{"$match": {
"class.people.name":"Susan"
}
},
{"$group":{
"_id":"$class.people.name",
"classes":{"$push":"$class.name"}
}
}
])
结果:-
{ "_id" : "Susan", "classes" : [ "class 1", "class 2" ] }
尝试在第一个$unwind
操作之前进行$match
,以避免$unwind
之前管道中不必要的结果。
有关改进的性能,请参阅聚合管道优化 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.