Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firestore-对文档使用更新方法,但使用对象(Java)_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Firestore-对文档使用更新方法,但使用对象(Java)

Firestore-对文档使用更新方法,但使用对象(Java),java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我想用我拥有的用户对象更新文档,但我不想在文档不存在时创建该文档,因此我无法将“DocumentReference.set”与“SetOptions.Merge()”一起使用(据我所知) 然而,根据这篇文章(),“update”实际上是我需要的命令。我的问题是,更新似乎不接受Java对象 我不想亲自检查文档是否存在,因为这将导致不必要的读取 这有什么办法吗 以下是我的代码(为了简单起见,我删除了成功和失败侦听器): 听起来像你: 要更新现有文档吗 不确定它是否已经存在 不愿意阅读文档以查看它是否

我想用我拥有的用户对象更新文档,但我不想在文档不存在时创建该文档,因此我无法将“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);
            }
        }