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

时间:2019-01-07 08:14:53

标签: firebase google-cloud-firestore

我使用了用于标识用户组的文档集合。我的意图是仅使用用户ID填写文档ID字段,而文档中没有其他无用的字段。但是显然,在进行了一些研究之后,不可能有空文档。

因此,我的问题是如何将文档中的(虚拟)字段设置为null,根据documentation,Firestore支持此字段。我正在Android和Web上进行此操作,但是我认为任何平台的代码都可以。

更新:我已经确认,只需将null设置为Web中的字段就可以了,但是,当我尝试在Android中使用类似的方法时:

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

Android Studio警告我:

  

将'null'参数传递给标注为@NotNull的参数

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

3 个答案:

答案 0 :(得分:1)

以下内容适用于网络:

        firebase.firestore().collection('abcd').doc("efgh").set({
            name: "...",
            nullField: null
        })

答案 1 :(得分:1)

一个对我有用的解决方案,看起来似乎很简单,就是将您要无效的字段设置为空字符串(字符串)和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

答案 2 :(得分:1)

假设userId属性的类型为String,请使用以下代码来用userId = 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!");
                    }
                });
            }
        }
    }
});

如果您正在为用户使用模型类,请从此 post 中查看我的答案。