Mongoose / MongoDB聚合 – $匹配$ unwind $匹配不工作?

我将如何改变这个档案视图聚合也聚合from.view.archive:真?

..同时防止重复消息的聚合..如果从用户(sessionUser)存在于数组中,则只能得到这个消息之一..

if (archive === true) { console.log('archive === ' + true); Models.Message.aggregate([ // Match documents { "$match": { "to": { "$elemMatch": { "username": req.session.username, "view.archive": true, "view.bin": false } }, "$or": messagingquery }}, // Unwind to de-normalize { "$unwind": "$to" }, // Match the array elements { "$match": { "to.username": req.session.username, "to.view.archive": true, "to.view.bin": false }}, // Group back to the original document { "$group": { "_id": "$_id", "from": { "$first": "$from" }, "to": { "$push": "$to" }, "message": { "$first": "$message" }, "timesent": { "$first": "$timesent" }, "replies": { "$first": "$replies" }, "messaging": { "$first": "$messaging" } }}, // Sort by updated, most recent first (descending) {"$sort": {"updated": -1}} ], function (err, messages) { if (err) { console.log(err); res.send(err); } res.json({ messages : messages, sessionUser: sessionUser }); }); } 

UserMessageSchema对于MesageSchema的From&To数组看起来是这样的:

 var UserMessageSchema = new Schema({ user : { "type": Schema.ObjectId, "ref": "User" }, username : String, view : { inbox : Boolean, outbox : Boolean, archive : Boolean, bin : Boolean }, read : { marked : { "type": Boolean, default: false }, datetime : Date }, updated : Date }); 

我觉得我一定是误解了一些情况,但是听起来你应该能够在第一场比赛中增加一个简单的$or

 { "$match": { "$or" : [ { "to": { "$elemMatch": { "username": req.session.username, "view.archive": true, "view.bin": false } } }, { "from" : { "$elemMatch" : { "username" : req.session.username, "view.archive": true, } } } ], "$or": messagingquery }} 

复制不能由$match阶段产生,因为$match根据条件过滤文档。 重复来自哪里以及“重复”究竟是如何定义的?