javascript - 在 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)}), {})
}
解决方案
推荐阅读
- python - 有没有办法在异步 python 中等待值
- python - 根据 str.split 的多个部分分配列名
- elasticsearch - Elasticsearch - 不支持小于 -1 字节的值查询节点
- python - 在熊猫中映射分类列的更好方法?
- arrays - Ruby Set 和 Ruby Array,它们是否使用 postgresql 以相同的方式存储?
- dax - 从 2 个事实表创建数据透视表
- mysql - MySql WHERE 与计数聚合列 - 不可能,那么解决方案是什么?
- .htaccess - How to allow access to files for all sites while maintaining htaccess redirection
- python - Python Sockets:客户端和服务器都相互发送和接收数据?
- pytorch - 图中似乎没有使用其中一个微分张量