当前位置: 首页 > 知识库问答 >
问题:

Cloud Firestore:如何将文档中的字段设置为null

壤驷阳冰
2023-03-14

我使用一组文档来识别用户组。我的意图是只使用用户id填写文档id字段,而不在文档中包含其他无用字段。但在做了一些研究之后,显然不可能有空的文档。

所以,我的问题是如何将文档中的一个(虚拟)字段设置为null,根据留档,这应该是FiRecovery支持的。我正在Android和Web中研究这个问题,但我认为任何平台的代码都可以。

更新:我已经确认,在Web中简单地将null作为字段就可以了,然而,当我在Android中尝试类似的方法时,如下所示:

Map<String, Object> emptyData = new HashMap<>();
emptyData.put("nullField", null);

Android Studio警告我:

将“null”参数传递给注释为@NotNull的参数

我应该继续传递null还是应该做其他事情?

共有3个答案

葛威
2023-03-14

一个对我有效的解决方案,看起来很简单,就是将要为null的字段设置为空字符串(字符串)和null(整数)。没有什么特别的东西,如果你想测试的话,可以在firebase firestore文档浏览器中手动将值设置为null。

this.itemDoc.update({item: ''});

this.itemDoc.update({item: null});

这是使用angularfire2完成的,以下是文档链接:https://github.com/angular/angularfire2/blob/master/docs/firestore/documents.md

皇甫心思
2023-03-14

以下内容适用于web:

        firebase.firestore().collection('abcd').doc("efgh").set({
            name: "...",
            nullField: null
        })
云隐水
2023-03-14

假设用户ID属性的类型为字符串,请使用以下代码以更新所有用户的用户ID=null:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference usersRef = rootRef.collection("users");
usersRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            List<String> list = new ArrayList<>();
            for (DocumentSnapshot document : task.getResult()) {
                list.add(document.getId());
            }

            for (String id : list) {
                rootRef.collection("Users").document(id).update("userId", null).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "Username updated!");
                    }
                });
            }
        }
    }
});

如果您正在为您的用户使用模型类,请参阅我在本文中的答案。

 类似资料:
  • Cosmos存储过程将每个记录的PumperID字段设置为默认值会是什么样子? 我们需要这样做来修复一些数据,因此该过程将访问每个具有PumperID字段的记录(并非所有文档都有此字段),并将其设置为默认值。

  • 我有一个Material UI文本字段作为输入,我需要强制输入大写文本。我曾尝试使用作为样式属性的一部分,但这似乎不起作用。我的组件中的所有其他样式都已正确应用,但textTransform未正确应用。 我也尝试过使用标准样式方法将我的样式作为道具传递给组件,但我得到了相同的结果。 我的组件: 输出:

  • 问题内容: 我试图通过对数据库中的文档进行计数,并使用该数字来创建_id(假设第一个_id为0)来为我的Mongoose模型动态创建_id。但是,我无法从值中设置_id。这是我的代码: 我尝试了多种设置_id的方法,但是它对我不起作用。这是最新的错误: 如果您知道发生了什么事,请告诉我。 问题答案: 您要么需要将该属性声明为架构的一部分(将其注释掉),要么使用该选项并将其设置为(您正在使用该选项,

  • 问题内容: 我有一个用netbeans开发的应用程序,我想在显示面板时将焦点设置为一定。我已经阅读了许多文章,并尝试了各种方法,但没有奏效。主要问题之一是在哪里放置所需的代码,我认为在我的情况下是 有一些指示使用Window Listener的帖子,但是随着netbeans生成GUI,我无法看到如何实现接口,因为我无法编辑创建jPANEL等的代码。整个过程非常令人沮丧,我真的没有相信这应该很困难。

  • 我试图设置可变投掷SpEL在Spring启动应用程序: 应该来自应用程序-{profile}。财产。但是字段始终为空,即使已存在。 带有的代码可以正常工作,但包含空字符串。 我的问题是,如果使用SpEL的属性不存在,如何将null设置为variable。 upd:值来自特定于配置文件的属性文件

  • 如何设置文本字段中文本的颜色?例如,将“你好和谐”字段中的“和谐”字体设置为红色。Android代码实现如下: SpannableStringBuilder ssb=新的SpannableStringBuilder();ssb。setSpan(新的ForegroundColorSpan(getCurrentHintTextColor()),i,i 1,0);