如何将具有值的集合中的所有文档以地图Firestore Web的形式推送到另一个集合

时间:2019-11-12 15:07:00

标签: javascript firebase google-cloud-firestore

我的购物车中有产品,可以在结帐时将其转换为订单。我希望将购物车集合中的所有文档映射为单个文档中订单集合中的对象映射/数组。

function placeOrder(){
    var uid = auth.currentUser.uid
    db.collection('users').doc(uid).collection('carts')
    .get().then((items)=>{
        items.forEach((item)=>{
            var item_key = item.id
           db.collection('users').doc(uid).collection('orders').doc().set({
               items : [item_key]
           })
           db.collection('users').doc(uid).collection('carts').doc(item_key).delete()
        })       
    })
}

1 个答案:

答案 0 :(得分:1)

订单商品ID =>数组字段:

...
.get()
.then(snapshot => {
    const ids = snapshot.docs.map(doc => doc.id)

    db.collection('users')
        .doc(uid)
        .collection('orders')
        .doc()
        .set({items : ids})
}

订单商品数据=>子集合:

...
.get()
.then(snapshot => {
    const batch = db.batch()
    const orderRef = db.collection('users').doc(uid).collection('orders').doc()
    const cartRef = db.collection('users').doc(uid).collection('carts').doc(item_key)

    batch.set(orderRef, { 
        // order fields
    })

    snapshot.forEach(docSnap => {
        batch.set(orderRef.collection('order_items').doc(docSnap.id), {
            // order item fields
        })
    })

    batch.delete(cartRef)
    batch.commit()
}