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

Я использую консоль Firebase для подготовки данных для демонстрационного приложения. Одним из элементов данных являются участники. Участники — это массив. Я хочу добавить несколько участников в виде массива в Firebase. Я так понимаю у Firebase не массивы, а объект с ключами (в хронологическом порядке). Как мне это сделать для подготовки выборочных данных? Мои текущие данные Firebase выглядят так, как показано ниже. введите описание изображения здесь


person vijayst    schedule 15.10.2016    source источник


Ответы (4)


База данных Firebase не хранит массивы. Он хранит словари/связанные массивы. Итак, самое близкое, что вы можете получить, это:

attendees: {
  0: "Bill Gates",
  1: "Larry Page",
  2: "James Tamplin"
}

Вы можете создать эту структуру в консоли Firebase. И затем, когда вы прочитаете его с помощью одного из 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;

Таким образом, вместо того, чтобы кодировать требование уникальности, структура данных неявно решает его.

person Frank van Puffelen    schedule 15.10.2016
comment
На данный момент отправка идентификаторов в консоль невозможна. Я либо использую набор, либо просто делаю толчок из приложения. Спасибо. - person vijayst; 15.10.2016
comment
Итак, вы можете использовать консоль Firebase для заполнения массива или нет!? - person Famic Tech; 12.12.2016

Написав свой другой ответ, я понял, что вы, возможно, просто ищете, как добавить push-идентификаторы в консоль.

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

запросите функцию здесь, поскольку вы Вы определенно не первый, кто спрашивает.

person Frank van Puffelen    schedule 15.10.2016

Чтобы добавить массивы вручную с помощью консоли Firebase Realtime DB:

  • Используйте двойные кавычки вместо одинарных ' '

введите здесь описание изображения


Что обеспечивает эту структуру:

введите здесь описание изображения

person gts    schedule 05.03.2021

Массив 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);
});

person Elonelon    schedule 02.08.2017