该文件对公司的FireStore批量写入只列出set(),update()并delete()允许的操作.
有没有办法向add()批处理添加操作?我需要使用自动生成的ID创建文档.
换句话说,我正试图弄清楚在SQL中与Firestore等价的是什么:
UPDATE table SET field = 'foo' WHERE <condition>`
Run Code Online (Sandbox Code Playgroud)
是的,我问的是如何一次更新多个文档,但与链接的问题不同,我特意询问如何一次性完成此操作,而无需在内存中读取任何内容,因为没有必要在您想要的任何内容时执行此操作是在匹配条件的所有文档上设置标志.
db.collection('table')
.where(...condition...)
.update({
field: 'foo',
});
Run Code Online (Sandbox Code Playgroud)
是我期望的工作,CollectionReference没有.update方法.
该 交易及成批写入文档中提到的交易和批量写入.交易结束是因为"事务包含任意数量的get()操作,后跟任意数量的写入操作" 批处理写入也不是解决方案,因为它们逐个文档地工作.
有了MongoDB,就可以了
db.table.update(
{ /* where clause */ },
{ $set: { field: 'foo' } }
)
Run Code Online (Sandbox Code Playgroud)
那么,Firestore可以用一个查询更新多个文档,SQL数据库或MongoDB的工作方式,即不需要为每个文档往返客户端吗?如果没有,怎么能有效地完成?
我有一个名为的类User,我创建了一个List<User> users;,现在我需要将此列表添加到 Firestore,我所做的是遍历列表并单独添加每个对象,因为 Firestore 仅接受 HashMaps 或对象,这是代码
for (User user:users){
db.collection("Users").document(user.getUserNumber()).set(user)
.addOnCompleteListener(MainActivity.this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Log.e(TAG, "DocumentSnapshot added with ID: " + task.getResult());
}else Log.e(TAG, "Error adding document", task.getException());
}
});
}
Run Code Online (Sandbox Code Playgroud)
我的问题是有什么方法可以通过一个请求将整个列表添加到 Firestore,而不是像列表大小一样多次调用 api?