Я хочу, чтобы все значения возвращались из "Items", и когда есть совпадение, я хочу, чтобы "isActive" было истинным.
exports.listUserItems = function (req, res) {
// Aggregate results
User.aggregate([{
"$match": {
"username": req.params.username
}
}, {
"$lookup": {
"from": "Items",
"localField": "itemIds",
"foreignField": "_id",
"as": "items"
}
}, {
"$unwind": {
"path": "$items"
}
}, {
"$project": {
"item": "$items.item_name",
"isActive": '1',
"_id": 0
}
}], (err, result) => res.json(result));
};
Каков наилучший способ добиться этого?
Я собирался вернуть все элементы и пользовательские элементы по отдельности, затем сравнить их и объект.значить их и т. Д. И т. Д., Что кажется излишним.Можно ли это сделать на стороне модели?
Я не могу опубликовать структуру документа, потому что stackoverflow не позволяет мне, но вы должны понять.
Редактировать:
Пользовательский документ
{
"username" : "anonuser",
"items" : [
ObjectId("5ba8345f1e56fe8e6caaaa07"),
ObjectId("5ba706d64e82292e72e9ae71")
]
}
Затем у меня есть коллекция "Items", в которой есть 3 таких документа:
{
"_id" : ObjectId("5ba706d64e82292e72e9ae71"),
"item_name" : "Salary"
}
Мой ожидаемый вывод json api должен быть.
[{"_id":"5ba706d64e82292e72e9ae71","item_name":"Salary","isActive":true},{"_id":"5ba8345f1e56fe8e6caaaa07","item_name":"Fulltime","isActive":true},{"_id":"5ba9af6c1e56fe8e6cab521e","item_name":"Advisor","isActive":false}]