получить данные из Firestore как json - PullRequest
0 голосов
/ 01 декабря 2018

в документации Firestore я нашел этот способ для получения нескольких данных

db.collection("cities").where("capital", "==", true)
.get()
.then(function(querySnapshot) {
    querySnapshot.forEach(function(doc) {
        // doc.data() is never undefined for query doc snapshots
        console.log(doc.id, " => ", doc.data());
    });
})

но таким образом мне нужно сделать два цикла один в бэкэнде для обработки и передачи данных в объект, а затем другой цикл во внешнем интерфейсе для отображенияданные !!есть ли способ выйти из первого цикла и вернуть список данных, не обрабатывая его в цикле во внутреннем интерфейсе, как этот

return res.status(200).json(doc.data())

ответ

.get()
.then(query=>{
    let data = query.docs.map(doc=>{
        let x = doc.data()
            x['_id']=doc.id;
            return x;
    })
    res.status(200).json(data);
})

thisответ вернет идентификатор документа как часть данных сам

1 Ответ

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

в соответствии с https://cloud.google.com/nodejs/docs/reference/firestore/0.17.x/QuerySnapshot и https://cloud.google.com/nodejs/docs/reference/firestore/0.17.x/QueryDocumentSnapshot прямого способа получить результаты непосредственно в виде объекта json не существует.Если вам нужен список данных (список означает массив, поэтому у вас не будет идентификатора в качестве индекса), я бы использовал функцию массива map: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/map

return db.collection("cities").where("capital", "==", true)
    .get()
    .then(function(querySnapshot) {
        return querySnapshot.docs.map(doc => {...doc.data(), id: doc.id});
    });

, если вы не можетеиспользуйте синтаксис es6, затем замените {...doc.data(), id: doc.id} на

Object.assign(doc.data(), {id: doc.id});

PS: это вернет объект Promise, а не сам массив, поэтому вам придется использовать .then() в возвращенном Promise или новом await синтаксис

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