Настройка массивов в Firebase с помощью Firebase console

#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);
});