mongoose – 总共添加“is_self”字段

我正在构build一个聊天应用程序,它应该从MongoDB中检索所有新的消息,并将其分组到对话中。 但每条消息应该有一个新的“is_self”字段

编辑:如果来自用户的消息,'is_self'字段包含布尔值。

所以伪:

is_self: {$cond: {if: {message.sender == MYID)}, then: true, else: false} 

所以可以说我有消息模型

  var MessageSchema = new Schema({ conversation_id:{type: mongoose.Schema.ObjectId, ref: 'Conversation', required: true}, message: {type: String, required: true}, sender: {type: mongoose.Schema.ObjectId, ref: 'User'}, created: {type: Date, default: Date.now}, read: {type: Boolean, default: false} }); 

还有一个对话模式

  var ConversationSchema = new Schema({ from: {type: mongoose.Schema.ObjectId, ref: 'User', required: true}, to: {type: mongoose.Schema.ObjectId, ref: 'User', required: true}, last_changed: {type: Date, default: Date.now}, created: {type: Date, default: Date.now} }); 

现在我尝试做一个聚合,加载在一个conversation_id数组内的所有消息,并创build> last_checkeddate…

所以看起来像这样:

 mongoose.model("Message").aggregate([ // First find all messages { $match: { $and: [{conversation_id: {$in: idArray}}, {created: {$gt: lastChecked}}] } }, // Add is self field { $group: { _id: $_id, $is_self: { $cond: {'if(message.sender == MYID then true else false': '??'} } } }, // Sort by date {$sort: {created: -1}}, // Then group by conversation { $group: { _id: '$conversation_id', messages: { $push: '$$ROOT' }, } } // TODO: find users for unknown conversation /*, { $project: { user: { $or: [{conversation_id: {$in: knownConversations}}] } } }*/ ]) 

我尝试使用$ cond和if / else语句,但是Mongo不允许使用..

谢谢!

简单的使用返回布尔值的$eq操作符。 另外$push将采取任何对象格式,你扔在它:

 var senderId = // whatever; mongooose.model("Message").aggregate([ { "$match": { "conversation_id": { "$in": idArray }, "created": { "$gt": lastChecked } }}, { "$group": { "_id": "$conversation_id", "messages": { "$push": { "message": "$message", "is_self": { "$eq": [ "$sender", senderId ] } } } }} // whatever else ],function(err,results) { }) 

如果你想,然后结合$cond交替添加“is_self”只有当检测到:

  { "$group": { "_id": "$conversation_id", "messages": { "$push": { "$cond": [ { "$eq": [ "$sender", senderId] }, { "message": "$message", "is_self": true }, { "messsage": "$message" } ] } } }}