我正在使用node和mongoose,并且有一个如下所示的模式:
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
数组中) ,只返回单个subscriber数组元素及其_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: 'me@here.com',
firstName: 'Testy',
lastName: 'Testelson' } ] }
user:
[ { _id: 5678,
email: 'you@there.com',
firstName: 'Biggy',
lastName: 'Smalls' } ] }]
基于$ elemMatch文档,我假设我只会看到用户1234,因为那是匹配req.user._id
的记录。我在这里做错了什么?
谢谢!