首页 > 解决方案 > 在 Firestore 中,我应该在同一个文档上多次调用 transaction.set,还是将字段缩减为单个对象?

问题描述

编辑:我建议使用选项 A 并多次调用事务。它比内联循环读取更清晰(imo)。此外,如果您使用嵌套对象,那么example: Object.keys(obj).reduce(fn, {})即使使用 {merge: true} 也会覆盖示例字段。

我需要记录在某一天遇到每个项目及其某些属性的次数

const item = {
    number: 3,
    arr: ['qwer', 'asdf', 'zxcv'],
    // Nested objects also occur, but would make this question too long.
}

以下选项是否不正确:

A. 在同一个文档上多次调用 set

transaction.set(dayRef, {
    number: firebase.firestore.FieldValue.increment(item.number)
}, {merge: true})

item.arr.forEach(str => transaction.set(dayRef, {
    arr: {
        [str]: firebase.firestore.FieldValue.increment(item.number)
    }   ​
}, {merge: true})

B. 将属性简化为单个集合调用


transaction.set(dayRef, {
    ​number: firebase.firestore.FieldValue.increment(item.number),
    arr: item.arr.reduce((acc, str) => ({...acc, [str]: firebase.firestore.FieldValue.increment(item.number)}), {})
}

标签: javascriptgoogle-cloud-firestore

解决方案


推荐阅读