Firebase Cloud Firestore and Functions - хранит документы с массивом объектов - PullRequest
0 голосов
/ 15 января 2019

У меня на локальном компьютере хранится следующий JSON, который я хочу сохранить в Firebase Firestore:

guides: [  
    {  
       "id":0
       "name":"name0",
       "sources":[
           {
               "type":"s3",
               "url":"https://s3.amazonaws.com/xxxx/file0.mp3"
           }
       ]
    },
    {  
       "id":1
       "name":"name1",
       "sources":[
           {
               "type":"s3",
               "url":"https://s3.amazonaws.com/xxxx/file1.mp3"
           }
       ]
    }
]

Какое лучшее решение для магазина "Источники"? поэтому, когда я выполняю поиск «направляющих» (используя облачные функции Firebase), он также извлекает список источников, не выполняя различные поиски для каждого элемента источников.

В Firebase Firestore тип массива не допускает список объектов, и я попытался использовать «reference», но он возвращает «структуру и настройки» документа, на который ссылается.

function getGuides(guideId,response){
  db.collection('guides')
.where('id', '==', guideId).get()
.then(snapshot => {
    let guideDoc = snapshot.docs.map( doc => {
        return doc.data()
        })
    return guideDoc;
})

1 Ответ

0 голосов
/ 15 января 2019

В своем ответе вы говорите, что «в Firebase Firestore тип массива не допускает список объектов».

Это не правильно: вы можете хранить объекты в массиве. В консоли Firebase сначала необходимо выбрать тип данных массива, а затем для каждого члена массива выбрать тип карты. С помощью JavaScript SDK вы можете сохранить документ, содержащий массив объектов.


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

  • Имейте коллекцию guide документов
  • Для каждого guide документа в этой коллекции:
    • использовать значение id в качестве идентификатора документа;
    • имеет поле sources массива типов, в котором вы храните объекты, подобные тому, который вы указали в своем вопросе.

Таким образом, вы можете запросить ваш guides по документу id и получить массив следующим образом:

var docRef = db.collection("guides").doc(guideId);

docRef.get().then(doc => {
    if (doc.exists) {
        const sourcesArray = doc.data().sources;
        sourcesArray.forEach((element) => {
            console.log(element.type); 
            console.log(element.url); 
        });
    } else {
        // doc.data() will be undefined in this case
        console.log("No such document!");
    }
}).catch(function(error) {
    console.log("Error getting document:", error);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...