1
我使用節點和貓鼬,並有一個模式,看起來像這樣:
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。我在這裏做錯了什麼?
謝謝!