返回一个子阵列的只有第一个元素$ elemMatch
问题描述:
我使用节点和猫鼬,并有一个模式,看起来像这样:
var SubscriberSchema = new Schema({
'user': [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
'level': { type: String, enum: [ 'owner', 'sub', 'commenter', 'poster' ] }
'dateAdded': { type: Date, default: Date.now }
});
// Group Schema
var GroupSchema = new Schema({
'groupOwner': [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
'groupName': String,
'subscribers': [SubscriberSchema],
});
我想查询组中找到的所有组,其中一个用户(通过令牌认证存储在req.user._id
中)是一个用户(即他们的_id
在subscribers
数组中),并且只返回单个用户数组元素及其_id
。
我已阅读$elemMatch的Mongo文档,因为这似乎是我需要的,并在下面构建了查询。这将返回我想要的信息,但会返回subscribers
数组的所有元素。我如何才能返回subscribers
阵列中匹配我的req.user._id
的单个元素?
当前查询,返回subscribers
所有元素:
Group
.find({ "subscribers.user": req.user._id}, { subscribers: { $elemMatch: { user: req.user._id }}})
.sort('groupName')
.populate('groupOwner', 'email firstName lastName')
.populate('subscribers.user', 'email firstName lastName')
.exec(function(err, data) {
if (err) {
logger.error('Unable to retrieve groups for user: ' + err.message);
res.status(500)
} else {
res.json(data);
}
});
这将返回用户以下(通过util.inspect(data[0].subscribers)
):
Subscribers
[{
user:
[ { _id: 1234,
email: '[email protected]',
firstName: 'Testy',
lastName: 'Testelson' } ] }
user:
[ { _id: 5678,
email: '[email protected]',
firstName: 'Biggy',
lastName: 'Smalls' } ] }]
基于$ elemMatch文档,我想我会因为这是匹配req.user._id
的记录,所以只能看到用户1234。我在这里做错了什么?
谢谢!