#arrays #firebase #firebase-realtime-database #firebase-console
# #массивы #firebase #firebase-база данных в реальном времени #firebase-консоль
Вопрос:
Я использую Firebase console для подготовки данных для демонстрационного приложения. Одним из элементов данных являются участники. Участники — это массив. Я хочу добавить несколько участников в виде массива в Firebase. Я понимаю, что в Firebase нет массивов, а есть объект с ключами (в хронологическом порядке). Как мне это сделать для подготовки образцов данных? Мои текущие данные Firebase выглядят так, как показано ниже.
Ответ №1:
База данных Firebase не хранит массивы. В нем хранятся словари / ассоциированные массивы. Итак, самое близкое, что вы можете получить, это:
attendees: {
0: "Bill Gates",
1: "Larry Page",
2: "James Tamplin"
}
Вы можете создать эту структуру в Firebase Console. А затем, когда вы прочитаете его с помощью одного из SDK Firebase, он будет преобразован в массив.
firebase.database().ref('attendees').once('value', function(snapshot) {
console.log(snapshot.val());
// ["Bill Gates", "Larry Page", "James Tamplin"]
});
Так что это может быть результатом, который вы ищете. Но я рекомендую прочитать это сообщение в блоге о том, почему Firebase предпочитает его, если вы не храните массивы: https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html .
Не используйте массив, когда вам действительно нужен набор
Большинство разработчиков на самом деле не пытаются сохранить массив, и я думаю, что ваш случай может быть одним из них. Например: может ли «Билл Гейтс» быть участником дважды?
attendees: {
0: "Bill Gates",
1: "Larry Page",
2: "James Tamplin",
3: "Bill Gates"
}
Если нет, вам нужно будет проверить, есть ли он уже в массиве, прежде чем добавлять его.
if (!attendees.contains("Bill Gates")) {
attendees.push("Bill Gates");
}
Это явный признак того, что ваша структура данных неоптимальна для данного варианта использования. Необходимость проверять все существующие дочерние элементы перед добавлением нового приведет к ограничению масштабируемости.
В этом случае вам действительно нужен набор: структура данных, в которой каждый дочерний элемент может присутствовать только один раз. В Firebase вы моделируете наборы следующим образом:
attendees: {
"Bill Gates": true,
"Larry Page": true,
"James Tamplin": true
}
И теперь всякий раз, когда вы пытаетесь добавить Билла Гейтса во второй раз, это не работает:
attendees["Bill Gates"] = true;
Таким образом, вместо того, чтобы кодировать требование уникальности, структура данных неявно решает его.
Комментарии:
1. На данный момент ввод идентификаторов в консоль невозможен. Я буду либо использовать set, либо просто нажимать из приложения. Спасибо.
2. Так вы можете использовать Firebase console для заполнения массива или нет !?
Ответ №2:
Для добавления массивов вручную с помощью Firebase Realtime DB console:
- Используйте двойные » » вместо одинарных » ‘ кавычек
Который обеспечивает эту структуру:
Комментарии:
1. Я использовал одинарные кавычки, затем я перешел на двойные кавычки, и это сработало!!
Ответ №3:
После написания моего другого ответа я понял, что вы, возможно, просто ищете, как добавить push-идентификаторы в консоль.
На данный момент это не функция. Большинство из них либо используют разные типы ключей при вводе тестовых данных, либо имеют небольшой фрагмент JavaScript на другой вкладке для генерации ключей и копирования / вставки их.
Пожалуйста, запросите эту функцию здесь, поскольку вы определенно не первый, кто спрашивает.
Ответ №4:
массив firebase? да, у меня такая же проблема с вами несколько недель назад, но я нашел ее здесь. Наконец-то я могу использовать его с моими ChartJS.
function jamToArray(snapshot) {
const returnArr = [];
snapshot.forEach(function(childSnapshot) {
const item = childSnapshot.val().time;
returnArr.push(item);
});
return returnArr;
};
firebase.database().ref('sensor').limitToLast(10).on('value', function(snapshot) {
const jam = jamToArray(snapshot);
});