2 回答
TA贡献1829条经验 获得超7个赞
您可以链接 Select 语句,但第二个调用的值将覆盖第一个调用的值,而不是执行示例所暗示的操作,即深入了解嵌套结构。
为了实现您显然想要做的事情,您可以使用聚合框架以任意方式操作这些嵌套对象。
例如,这是一个简单的管道,可以提取出完全匹配的课程:
pipeline := []bson.M{
{"$match": bson.M{"school_name": school}},
{"$unwind": "$dept_list"},
{"$unwind": "$dept_list.crse_list"},
{"$match": bson.M{
"dept_list.dept_name": dept,
"dept_list.crse_list.crse_name": crse,
}},
}
iter := coll.Pipe(pipeline).Iter()
您可以像使用 Find 中的迭代器一样使用生成的迭代器。
对于此管道,生成的对象将如下所示:
bson.M{
"_id":"...",
"dept_list": bson.M{
"dept_name": "Department A",
"crse_list": bson.M{
"crse_name": "Class B",
}
},
"school_name":"School ABC",
}
不过,您可以以任意方式更改结果对象的形状。有关更多详细信息,请查看聚合框架文档。
- 2 回答
- 0 关注
- 175 浏览
添加回答
举报