根据条件与其他值在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 }
任何一个人都可以帮助在上述所有场景中获得预期的结果。