根据条件与其他值在mongoose中获取内部数组值

我有一个DB结构如下:

{ "Title": "AAA", "Photos": ["/aaa/aaa.png"], "Loc": "XXX", "Emp": "SSS", "Rate": [{ "Rating": 2, "RateID": "12345654654", "RatedDate": new Date() }], "Fav": [{ "FavValue": 2, "FavID": "1111", "FavDate": new Date() }] } 

在这里,我想要默认获取所有的细节。 但是从数组中,我需要获得匹配ID的对象。

在“Rate”数组中它需要匹配“RateID”,在“Fav”数组中它需要匹配“FavID”。

“Rate”和“Fav”都不会包含对象。

我已经试过follmongoose聚合:

 ss.aggregate([ { $unwind: "$Rate" }, { $group: { "_id": '$_id', "Title": { "$first": "$Title" }, "Loc": { "$first": "$Loc" }, "Emp": { "$first": "$Emp" }, "Photos": { "$first": "$Photos" }, "Rate": { $max: { $cond: [ { $eq: [ "$Rate.RateID", new ObjectId(id) ] }, '$Rate.Rating', null ] } }, "Fav": { $max: { $cond : [ { $eq : [{ "$size": "$Fav" }, 0]}, null, { $cond: [ { $eq: [ "$Fav.FavID", new ObjectId(id) ] }, '$Fav.FavValue', null ] } ]} } } } ], function (err, AvgResult) { res.json({"result": AvgResult}); }); 

对于“Rate”,如果数组为空,则返回空结果为{}

对于“Fav”,如果数组为空或者包含对象,则返回null

如果我发送ID为“12345654654”,结果应该是这样的

 { "Title": "AAA", "Photos": ["/aaa/aaa.png"], "Loc": "XXX", "Emp": "SSS", "Rate": 2, "Fav": null } 

如果ID是“1111”,结果应该是

 { "Title": "AAA", "Photos": ["/aaa/aaa.png"], "Loc": "XXX", "Emp": "SSS", "Rate": null, "Fav": 2 } 

如果“Fav”是DB中的空数组,如“Fav”:[]和ID – 是“12345654654”,则结果应如下

 { "Title": "AAA", "Photos": ["/aaa/aaa.png"], "Loc": "XXX", "Emp": "SSS", "Rate": 2, "Fav": null } 

任何一个人都可以帮助在上述所有场景中获得预期的结果。