Как объединить два массива из разных коллекций nosql? - PullRequest
0 голосов
/ 06 июня 2018

Я хочу объединить две коллекции json с vue.

{
  "menu" : {
    "-LEJeLN1gNToI0U_xCGO" : {
      "available" : true,
      "category" : "Suppe",
      "name" : "Tomatensuppe",
      "price" : "3,9"
    },
    "-LEJeQHCIatuhn-L7EXB" : {
      "available" : true,
      "category" : "Suppe",
      "name" : "Zwiebelsuppe",
      "price" : "3,9"
    },
    "-LEJeXA33ljBP1B27nFV" : {
      "available" : true,
      "category" : "Suppe",
      "name" : "Knoblauchcremesuppe",
      "price" : "3,9"
    },
    "-LEJed9vwMdX8kL8-A50" : {
      "available" : true,
      "category" : "Suppe",
      "name" : "Frittatensuppe",
      "price" : "3,9"
    },
    "-LEJehsBE2CQJAmseZ9j" : {
      "available" : true,
      "category" : "Suppe",
      "name" : "Minestrone",
      "price" : "3,9"
    },
    "-LEJeoLVcF3-w84gD5Bj" : {
      "available" : true,
      "category" : "Suppe",
      "name" : "Bouillon mit Ei",
      "price" : "3,9"
    },
    "-LEJezGoiQRVz2zTRZe6" : {
      "available" : true,
      "category" : "Suppe",
      "name" : "Estragoncremesuppe",
      "price" : "4,5"
    }
  },
  "orders" : [ null, {
    "comment" : "Bitte, Lassen Sie die Pizza geschnitten.",
    "date" : "2018-06-01 07:22:10",
    "item" : [ {
      "name" : "Tomatensuppe",
      "quantity" : "2",
      "size" : ""
    }, {
      "name" : "suppe",
      "quantity" : "1",
      "size" : ""
    } ]
  }, {
    "comment" : "Geben Sie Brot dazu",
    "date" : "2018-03-19 15:22:20",
    "item" : [ {
      "name" : "Minestrone",
      "quantity" : "3",
      "size" : ""
    }, {
      "name" : "Tomatensuppe",
      "quantity" : "2",
      "size" : ""
    } ]
  } ]
}

Проблема в том, что я собрал данные в отдельные коллекции, но мне нужно что-то вроде SQL Join для объединения некоторых коллекций.Например: у меня есть коллекция заказов, которая содержит заказы в ресторане.Теперь я должен создать счет, поэтому мне нужно как-то добавить цену данной статьи из коллекции меню.

Есть ли способ сделать это, или я должен построить другую структуру БД?Спасибо!

1 Ответ

0 голосов
/ 06 июня 2018

Существует несколько возможных подходов, в зависимости от того, как вы генерируете счет:

  1. Если вы генерируете счет на лету, и вам не нужно хранить историю ценво время генерации этого счета вы можете сначала запросить различные товары, составляющие заказ, а затем выполнить цикл по этим товарам, чтобы получить для каждого из них свою цену из узла меню (справочный список товаров)

  2. Если вы хотите сохранить цену товара во время заказа (цены товара могут меняться с течением времени): в вашем графическом интерфейсе вы, вероятно, составляете свой заказ, выбирая товар из списка, из которого вы выбралибаза данных (например, через выпадающий список, который вы заполняете значения из базы данных).В этом случае при извлечении списка доступных предметов вы выбираете не только название и категорию, но и цену.Когда вы записываете order в базу данных, вы добавляете в объект item цену item,, в результате чего получается структура, подобная следующей:

       "orders" : [ null, {
         "comment" : "Bitte, Lassen Sie die Pizza geschnitten.",
         "date" : "2018-06-01 07:22:10",
         "item" : [ {
         "name" : "Tomatensuppe",
         "price" : "3,9",
         "quantity" : "2",
         "size" : ""
       }, {
         "name" : "Estragoncremesuppe",
         "price" : "4,5",
         "quantity" : "1",
         "size" : ""
       } ]
    

    В этом случае вы генерируетеВаш счет путем запроса только один раз соответствующий узел order, вся необходимая информация доступна.

    Обратите внимание, что это решение, вероятно, является самым дешевым с точки зрения стоимости запросов, так как вам все равно придется запрашивать список элементов, и добавление дополнительного элемента данных "цена" к элементам заказа может более или менее бытьсчитается пренебрежимо сравнить с другими данными, которые составляют заказ. Конечно, это приблизительная оценка, и, если необходимо, она должна быть точно рассчитана !!

Реализация второго подхода с помощью Vue.js довольно проста, если вы выбираетесписок пунктов меню в виде массива объектов.

...