wil*_*tel 7 javascript firebase google-cloud-firestore
我有一个集合,其文档如下所示:
count: number
first: timestamp
last: timestamp
Run Code Online (Sandbox Code Playgroud)
该first值在文档创建后(几乎)应该永远不会改变。
在批量写入操作中,我尝试更新此集合中的文档,或创建那些尚不存在的文档。就像是
batch.setData([
"count": FieldValue.increment(someInteger),
"first": someTimestamp,
"last": someTimestamp
], forDocument: someDocumentRef, mergeFields: ["count","last"])
Run Code Online (Sandbox Code Playgroud)
我的希望是,通过从first数组中排除mergeFields,Firestore 可以设置count并将last其合并到现有文档或创建一个新文档,并且first仅在它没有先前值时进行设置(即,在此操作之前该文档不存在)。现在我很清楚,事实并非如此,而是first完全被忽略了。现在我想知道 Firestore 团队对于这种情况的意图是什么。
我知道我可以通过事务来实现这一点,但这与我的批量写入并不能很好地配合。交易是我唯一的选择,还是有更好的方法来实现这一目标?
我在文档中创建了时间戳和其他数据,并使用单独的创建和更新函数来处理此操作,而不是尝试一次完成所有操作。
初始创建函数包括创建日期等,然后后续更新使用非破坏性更新,因此只需省略更新负载中您不想覆盖的任何字段即可。
例如。创造:
batch.set(docRef, {created: someTimestamp, lastUpdate: someTimestamp})
Run Code Online (Sandbox Code Playgroud)
然后更新:
batch.update(docRef, {lastUpdate: someTimestamp, someOtherField: someData})
Run Code Online (Sandbox Code Playgroud)
这不会覆盖creationDate字段或任何其他字段,但会创建someOtherField(如果它不存在)。
如果您需要在第一次创建文档后进行“仅更新现有字段”更新,那么目前您必须先阅读文档以找出字段是否存在,然后创建一个更新有效负载来修补仅需要的字段。这可以在事务中完成,也可以根据您的需要自己编写此逻辑。
| 归档时间: |
|
| 查看次数: |
1909 次 |
| 最近记录: |