Firestore-对文档使用更新方法,但使用对象(Java)
我想用我拥有的用户对象更新文档,但我不想在文档不存在时创建该文档,因此我无法将“DocumentReference.set”与“SetOptions.Merge()”一起使用(据我所知) 然而,根据这篇文章(),“update”实际上是我需要的命令。我的问题是,更新似乎不接受Java对象 我不想亲自检查文档是否存在,因为这将导致不必要的读取 这有什么办法吗 以下是我的代码(为了简单起见,我删除了成功和失败侦听器): 听起来像你:Firestore-对文档使用更新方法,但使用对象(Java),java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我想用我拥有的用户对象更新文档,但我不想在文档不存在时创建该文档,因此我无法将“DocumentReference.set”与“SetOptions.Merge()”一起使用(据我所知) 然而,根据这篇文章(),“update”实际上是我需要的命令。我的问题是,更新似乎不接受Java对象 我不想亲自检查文档是否存在,因为这将导致不必要的读取 这有什么办法吗 以下是我的代码(为了简单起见,我删除了成功和失败侦听器): 听起来像你: 要更新现有文档吗 不确定它是否已经存在 不愿意阅读文档以查看它是否
update()
,如果文档不存在,就让它失败。它不会使你的应用程序崩溃。只需将错误侦听器附加到它返回的任务上,然后决定如果它失败了您要做什么
但是,您需要构建字段和值的映射,以便使用您拥有的源对象进行更新。没有解决方法。请编辑问题以显示您正在使用的代码和要更新的文档数据。很难理解你想做什么。@DougStevenson按请求完成编辑听起来你有两个不同的问题。一个是如何更新,如果你有一个对象在手。另一个问题是,如果文档不存在,该怎么办。我将在我的回答中解决这两个问题。今后,请确保您的问题一次只针对一个问题。
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);
}
}