#node.js #mongodb #mongoose
#node.js #mongodb #mongoose
Вопрос:
Я пытаюсь создать менеджер меню, в котором я могу обновлять удалять и создавать как новые пункты меню, так и категории. Мне нужно получить запрос, чтобы возвращать только пункты меню, а не все другие данные категории внутри документа.
Как я могу это сделать?
Это схема:
{
Categories:
name: ffjs,
id: fhsjd,
menu_items: [
item1: {
name: fhrse,
ingredients: [jksf,sjdfk,fjd]
}, ...
]
}
Я бы хотел, чтобы запрос просто возвращал item1, item2, item3 и так далее, но не могу заставить запрос работать.
Я пробовал:
Categories.find({"items" : $all})
Categories.find({}).select("items")
Я также пытался запрашивать определенные элементы только для тестирования и возвращал только полный документ, такой как :
Categories.find({"items.name" : "ramen"})
Categories.find({items :{"$elemMatch" : {name: "ramen"}}}, {"items.name" :1})
Комментарии:
1. Не могли бы вы показать, что вы пробовали?
2. Просто обновил его для вас 🙂
Ответ №1:
Решение 1. для его достижения можно использовать агрегированный метод, см. Ниже:
Categories.aggregate([
{ $match: { $and: [{id: "fhsjd" }, { "items.name" : "ramen" } ] } },
{ $project: { _id: 0, menu_items: 1 } }
])
Здесь вы можете использовать $match для запроса и $project для фильтра (0: для исключения и 1 для включения).
Решение 2. Чтобы вернуть конкретную запись, используйте ниже:
Categories.find({ "items.name" : "ramen" }, { items: 1, _id: 0 })
Чтобы вернуть все элементы, используйте ниже:
Categories.find({}, { items: 1, _id: 0 })
Надеюсь, одно из решений сработает для вас.
Комментарии:
1. Проверьте ссылку ниже для дальнейшего понимания Aggregate. mongoosejs.com/docs/api/aggregate.html#aggregate_Aggregate