Добавить элемент в JSON без ключевого идентификатора - FIREBASE - PullRequest
0 голосов
/ 04 декабря 2018

Это структура моей базы данных firebase и файла json, который я использовал для создания этой структуры firebase.

enter image description here

"Меню" этосписок ингредиентов, разбитый по категориям, например «Pane» (Хлеб на английском).«Панель», в которой есть поле «lista», которое имеет тип хлеба (каждый тип хлеба имеет 3 поля: «attivo», «nome», «prezzo»).Мне нужно попросить пользователя добавить новый ингредиент, чтобы добавить новый элемент, который имеет поля «attivo», «nome», «prezzo».

Проблема заключается в том, что мои суб ингредиенты (типыХлебы) не имеют идентификатора, поэтому я не знаю, как добавить потомков в «Lista» без ключа идентификатора.

С этим кодом (используется в моем файле машинописи) все «lista»поле, которое он заменяет новым элементом, и я не могу использовать .Child () , потому что у меня нет идентификатора для передачи:

firebase.database().ref('/menu/pane/lista').set({ 
      nome: data['nome'],
      prezzo: data['prezzo'],
      attivo: false, 
});

Можно ли добавитьэлемент без идентификатора и имеет ситуацию, как мой файл JSON?

РЕДАКТИРОВАТЬ Если я использую set или push, моя структура json меняется, и я не хочу этого: enter image description here Заранее спасибо.

Решено Я решил проблему с обходным путем.Я извлекаю массив, который заполняет «lista», и добавляю новый ингредиент, как в обычном массиве, а затем помещаю в «lista» в базе данных firebase массив с новым элементом.Таким образом, весь «листовый» контент заменяется массивом, который я нажимаю, но у массива есть новый элемент, поэтому он работает!

1 Ответ

0 голосов
/ 04 декабря 2018

Да, было бы возможно сохранить значения в массив, который вы бы сохранили в узле lista, но это создало бы "дополнительную сложность".См. Этот пост в блоге Firebase для получения более подробной информации: https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html

Рекомендуемый способ добавить некоторые данные в список без (естественного) идентификатора пользователя - использовать метод push: https://firebase.google.com/docs/reference/js/firebase.database.Reference#push.

Итак, вы должны сделать следующее, и Firebase автоматически сгенерирует уникальный идентификатор для вашей новой записи:

firebase.database().ref('/menu/pane/lista').push({ 
      nome: data['nome'],
      prezzo: data['prezzo'],
      attivo: false
});

Если вам не нужны идентификаторы вашего pane автоматически генерируемые узлы (как буквенно-цифровое значение типа "-LStoAsjJ ...."), вам нужно будет сгенерировать их самостоятельно.Но тогда вам придется использовать транзакцию , чтобы сгенерировать эту последовательность, и это также добавит некоторую сложность.Вероятно, лучше использовать push() и переделать ваш код переднего плана таким образом, чтобы вы могли работать с буквенно-цифровыми идентификаторами, сгенерированными Firebase.

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