【发布时间】:2017-06-08 04:08:29
【问题描述】:
假设我有以下架构
let TutorialQuizSchema = new mongoose.Schema({
groups: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Group' }]
});
let GroupSchema = new mongoose.Schema({
members: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
responses: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Response' }]
});
let UserSchema = new mongoose.Schema({
name: {
first: String,
last: String
}
});
给定一个用户 ID,是否可以查询所有将该用户作为其成员之一的组的所有教程测验?
我是聚合新手,但我认为应该是这样的
TutorialQuiz.aggreggate([
{
$unwind: '$groups'
},
{
$lookup: {
from: 'groups',
localField: 'groups',
foreignField: '_id',
as: 'group'
}
},
{
$unwind: '$group'
},
{
$match: {
'group.members': { $in: [req.user._id] }
}
}
]).exec((err, data) => {
// etc
})
如果我是正确的,我唯一的问题是数据被展平了。是否可以将其展开以保持层次结构(就像我们只是在做一个find + populate 查询)?
注意:如果有更好/更简单的方法可以做到这一点,我也愿意接受建议。
【问题讨论】:
-
你的 mongo 服务器版本是多少?
-
@Veeram 应该是最新的。如果没有,我可以随时更新。
标签: mongodb mongoose left-join grouping