Как отправить объект списка из другого объекта списка в Node.js и Express - PullRequest
0 голосов
/ 14 мая 2018

Я разрабатываю REST API с использованием node.js и Express Framework впервые. Я изо всех сил пытаюсь исправить очень маленькую проблему в Node.js и Express, но я не могу это сделать. Я проверил в Интернете все возможные решения и попробовал использовать все варианты, которые мне известны, но я не могу определить синтаксис для того же.

Фон : у меня есть один объект с именем «Ресторан» и другой объект с именем «Меню», который имеет ссылку внешнего ключа на «Ресторан».

Теперь у меня есть требование (общий сценарий), когда мне нужно отправить ответ клиенту в следующем формате json,

{
  "Restaurants": [
    {
      "restaurantid":"5ad36b55c26b685030335e30",
      "restaurantname": "ABC Restaurant",
      "menus":[
         {"menuname":"item1", "menucost":"10"},
         {"menuname":"item2", "menucost":"20"}
    },
    {
      "restaurantid":"9sd72b55c26b685030335e31",
      "restaurantname": "XYZ Restaurant",
      "menus":[
         {"menuname":"item3", "menucost":"10"},
         {"menuname":"item4", "menucost":"20"}
    }
  ]
}

Проблема - Я не могу понять, как собрать объект "menus" в файле node.js и добавить его в мою переменную "menus". Я могу отправить ответ из одной таблицы без каких-либо проблем. Проблема возникает только тогда, когда мне нужно отправить список меню на основе restaurantid.

Мне нужно получить меню на основе ресторана.

Ниже приведен код, который я использую для возврата данных из mongodb.

router.get('/', checkAuth, (req, res, next) => {
    Restaurant.find()
        .exec()
        .then(docs => {
            res.status(200).json({
                count: docs.length,
                restaurants: docs.map(doc => {
                    return {
                        _id: doc._id,
                        restaurantname: doc.restaurantname,
                        menus: ????? <<**This is where i am stuck. Not able to figure out how to write the syntax**>>
                    }
                })
            });
        })
        .catch(err => {
            res.status(500).json({
                error: err
            });
        });
});

Пожалуйста, помогите мне с этой проблемой.

1 Ответ

0 голосов
/ 14 мая 2018

Учитывая, что MongoDB предназначен для хранения иерархических документов с реляционными связями между независимыми коллекциями, являющимися чем-то запоздалым, это больше похоже на проблему проектирования схемы. Меню принадлежит одному ресторану (поскольку даже отдельные франшизы более крупной сети могут иметь свои собственные модификации или ограничения), поэтому Menus может работать лучше как свойство из Restaurants. Это, конечно, будет проще для вашего случая использования, так как вам не нужно ничего строить. Если вам нужно посмотреть только на меню, вы всегда можете db.Restaurants.find({...}, {menus: true}); проецировать только это поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...