Firebase云存储集合映射与forEach

时间:2018-06-05 21:04:30

标签: javascript firebase google-cloud-firestore

我正在尝试使用map函数来创建从集合返回的项目数组。

我的实现是使用forEach迭代哪个工作正常。但是,我无法使用地图功能。

以下是代码:



firestore.collection("notes").doc(this.props.id).collection('items').get()
.then((snap) => {
    let items = []
    snap.forEach((doc) => {
        items.push({id:doc.id,text:doc.data().text})
        console.log(`${doc.id} => ${doc.data()}`);
    });
    console.log(items)
});




但是,这不起作用:



firestore.collection("notes").doc(this.props.id).collection('items').get()
.then((snap) => {
    let items = snap.map((doc) => {
        return {id:doc.id, text:doc.data().text}
    })
    console.log(items)
});




它拍摄了一个“snap.map'不是一个功能。

我无法弄清楚我在哪里绊倒?

3 个答案:

答案 0 :(得分:5)

forEach方法存在,但不存在地图。

但是你可以获得一个docs数组:

  

QuerySnapshot中所有文档的数组。

您可以在其中调用地图,如下所示:

let items = snap.docs.map(doc => {
    return { id: doc.id, text: doc.data().text }
})

答案 1 :(得分:1)

snap可能不是真正的数组。它可能是某种类似数组的对象。尝试使用spread运算符(...)创建一个新数组,然后对其进行处理,如下所示:

firestore.collection("notes").doc(this.props.id).collection('items').get()
.then((snap) => {
    let items = [...snap].map((doc) => {
        return {id:doc.id, text:doc.data().text}
    })
    console.log(items)
});

那应该将它转换为一个真正的数组,这将使你能够使用.map函数。

答案 2 :(得分:0)

一个小例子,就我而言,我更新了一些东西:

<section ng-repeat="tienda in datosTiendas | filter: { ventaIndividualRedondeadaParaDisplay: searchbox } | limitTo:1">