$ eq不能与$ unwind结果mongoose一起使用

我有简单的模式,其中Events.like存储用户的objectId。 我想匹配数组中的特定用户(Events.like),并根据匹配添加一个标志isLiked。

Events.aggregate([ { $unwind: '$like'}, { "$project":{ // "count" : {$size: "$like"}, "like":1, "isLiked" :{ "$eq": [ "like", "593564b94642650d5b09f16b" ] }, // "isLiked" : { "$cond": [{ "$eq": [ "like", "593564b94642650d5b09f16b" ] }, true, false ] } } } } ], function(err, list) { } 

这个方法总是给我错误的。 看结果

  "data": [ { "_id": "593647ae9e10082982d3f7a2", "like": "593563f66d2e9f0b84553fc3", "isLiked": false }, { "_id": "593643a5a1e73a2841d3cddb", "like": "593564b94642650d5b09f16b", "isLiked": false }, { "_id": "593643a5a1e73a2841d3cddb", "like": "593563f66d2e9f0b84553fc3", "isLiked": false } ] 

谁能告诉我我错在哪里

########## update ##########

 { $unwind: '$like'}, { "$project":{ "isLiked" :{ "$eq": [ "$like", mongoose.Types.ObjectId("593564b94642650d5b09f16b") ] }, } }, { $group: { _id: '$_id', 'likes': { $sum: 1}, "like": { $push: '$like' }, "isLiked" : 1 } } 

那么MongoError:组合字段“isLiked”必须被定义为一个对象内的expression式

我简单的想要下面的结果

  "data": [ { "_id": "593647ae9e10082982d3f7a2", "like": ["593563f66d2e9f0b84553fc3","593643a5a1e73a2841d3cddb" ], "likes":2 "isLiked": true }, { "_id": "593643a5a1e73a2841d3cddb", "like": "[593563f66d2e9f0b84553fc3"], "likes":1, "isLiked": false } ] 

嗨你正在传递的用户ID是作为一个string传递,你将需要将其转换为objectId。 尝试这个

编辑 :由提问者@ShivShanker指出的字段的固定path

 Events.aggregate([ { $unwind: '$like'}, { "$project":{ // "count" : {$size: "$like"}, "like":1, "isLiked" :{ "$eq": [ "$like", mongoose.Types.ObjectId("593564b94642650d5b09f16b") ] } } } ], function(err, list) { }