Firestore - 对文档使用更新方法,但使用对象(Java)
Posted
技术标签:
【中文标题】Firestore - 对文档使用更新方法,但使用对象(Java)【英文标题】:Firestore - Use update method for document but with Object (Java) 【发布时间】:2020-11-14 12:51:51 【问题描述】:我想用我拥有的 User 对象更新一个文档,但如果该文档不存在,我不想创建它,因此我不能使用“DocumentReference.set”使用“SetOptions.Merge()”(据我了解)。
但是,根据这篇文章 (Difference between set with merge: true and update),“更新”实际上是我需要的命令。我的问题是,似乎 update 不接受 Java 对象。
我不想自己检查文档是否存在,因为这会导致不必要的读取。
有没有办法解决这个问题?
这是我的代码(为简单起见,我删除了成功和失败监听器):
public void saveUser(User user)
CollectionReference collection = db.collection("users");
String id = user.getId();
if (id.equals(""))
collection.add(user);
else
// I need to ensure that the ID variable for my user corresponds
// with an existing ID, as I do not want a new ID to be generated by
// my Java code (all IDs should be generated by Firestore auto-ID)
collection.document(ID).set(user);
【问题讨论】:
请编辑问题以显示您正在使用的代码以及您要更新的文档数据。很难理解你想要做什么。 @DougStevenson 按要求完成 听起来你有两个不同的问题。一个是如果你手头有一个对象,如何更新。另一个是如果文档不存在该怎么办。我将在我的回答中解决这两个问题。今后,请确保您的问题一次解决一个问题。 【参考方案1】:听起来像你:
-
想要更新现有文档
不确定它是否已经存在
不愿意阅读文档以查看它是否存在
如果是这种情况,只需调用update()
并在文档不存在时让它失败。它不会使您的应用程序崩溃。只需将错误侦听器附加到它返回的任务,然后决定如果它失败了你想做什么。
但是,您需要构建一个包含字段和值的 Map 以使用您拥有的源对象进行更新。没有解决方法。
【讨论】:
以上是关于Firestore - 对文档使用更新方法,但使用对象(Java)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用本地缓存并仅使用 Firestore 更新更改的文档?