【发布时间】:2016-02-17 01:00:27
【问题描述】:
想象一下 Mongo 3.2 中的两个集合,称为 student 和 class。什么查询会返回特定班级中的所有学生文档。
$lookup 的聚合似乎想要对集合中的所有文档进行操作。例如返回每个班级的所有学生而不是特定的学生。
如何请求生成的学生文档属于特定班级,id=23945647b27e7e652a9aeb65?
类:
{
"_id" : ObjectId("23945647b27e7e652a9aeb65"), // Given this
"name" : "Algebra",
"students" : [ "13945647b27e7e65869aeb65", "03945647b27e7e65029aeb65" ]
}
学生://返回这个
{
"_id" : ObjectId("13945647b27e7e65869aeb65"),
"name" : "foo"
}
{
"_id" : ObjectId("03945647b27e7e65029aeb65"),
"name" : "bar"
}
一些失败的尝试:
db.student.aggregate([{$match:{"$ref": "class", "_id": ObjectId("23945647b27e7e652a9aeb65")}},{$lookup:{from: "class",localField:"students",foreignField: "_id", as: "stuffFromRight"}}}])
db.student.aggregate([{$lookup:{from: {"$ref": "class", "_id": ObjectId("23945647b27e7e652a9aeb65")},localField:"students",foreignField: "_id", as: "stuffFromRight"}}])
这个获得了部分功劳,因为它确实进行了正确的查找。但是,...,它不会将结果限制为我想要的特定类。
db.student.aggregate([{$lookup:{from: "class",localField:"students",foreignField: "_id", as: "stuffFromRight"}}])
【问题讨论】:
标签: mongodb mongodb-query