Javascript 如何以map firestore web的形式将集合中具有值的所有文档推送到另一个集合

Javascript 如何以map firestore web的形式将集合中具有值的所有文档推送到另一个集合,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我的购物车中有产品,在结账时可以转换为订单。我希望cart集合中的所有文档都映射为单个文档中orders集合中的对象映射/数组 function placeOrder(){ var uid = auth.currentUser.uid db.collection('users').doc(uid).collection('carts') .get().then((items)=>{ items.forEach((item)=>{

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

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()
        })       
    })
}
订单项ID=>数组字段: 订单项目数据=>子集合:
到目前为止,您尝试了什么?这段代码似乎在循环中运行doc.set,为每个购物车项目创建一个文档。每个文档都将包含一个元素数组。我认为文本说明您希望为每个用户创建一个文档。如果您以将该集合从forEach循环中拉出为目标,那么最终将编写正确的代码。在删除所有其他内容之后,甚至在以后移动删除done@ShrinivasBendkhale-对不起;我忘记了项目实际上是一个快照。我是Kotlin dev兼职JS!应该已经修好了,这对我很有用。我还需要文档中的数据作为映射对象。我相信在Firestore中,您只能拥有键和值为数字、字符串的映射,可能还有其他Firestore类型,如GeoPoint。我不认为你可以有一个领域是地图。您需要使用子集合。例如:如何将对象与文档中的值进行映射例如,存储产品名称、产品id、产品价格等值的文档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()
}