Firebase CloudFireStore:如何将文档中的字段设置为空

Firebase CloudFireStore:如何将文档中的字段设置为空,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我使用一组文档来标识用户组。我的意图是仅使用用户id填写文档id字段,而不在文档中包含其他无用字段。但在做了一些研究之后,显然不可能有空文档 因此,我的问题是如何将文档中的(虚拟)字段设置为null,根据。我在Android和Web上都在做这方面的工作,但我想任何平台的代码都可以 更新:我已经确认,在Web中简单地将null作为字段就可以了,但是,当我在Android中尝试类似的方法时,如下所示: Map<String, Object> emptyData = new HashMap

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

因此,我的问题是如何将文档中的(虚拟)字段设置为null,根据。我在Android和Web上都在做这方面的工作,但我想任何平台的代码都可以

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

Map<String, Object> emptyData = new HashMap<>();
emptyData.put("nullField", null);
Map emptyData=new HashMap();
put(“null字段”,null);
安卓工作室警告我:

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


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

以下内容适用于web:

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

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

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


这是使用angularfire2完成的,这里是指向文档的链接:

假设
userId
属性是字符串类型,请使用以下代码以更新所有用户的
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!");
                    }
                });
            }
        }
    }
});
FirebaseFirestore rootRef=FirebaseFirestore.getInstance();
CollectionReference usersRef=rootRef.collection(“用户”);
usersRef.get().addOnCompletListener(新的OnCompletListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
列表=新的ArrayList();
对于(DocumentSnapshot文档:task.getResult()){
list.add(document.getId());
}
用于(字符串id:列表){
rootRef.collection(“Users”).document(id).update(“userId”,null).addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
Log.d(标记“用户名已更新!”);
}
});
}
}
}
});

如果您正在为您的用户使用一个模型类,请参阅我的回答,这对web是有效的,但是,当我在Android中尝试等效的方法时,它会警告我该字段被注释为@NonNull,有什么想法吗?如果它正在更新该字段,这是有效的,但是,如果我试图设置文档(创建或更新),它会警告我,应该为null的字段被注释为@NotNull,有什么想法吗?如果您在字段中添加此注释
@NonNull
,这就是最正确的行为。因此,如果您想保留
null
值,您不应该向编译器保证字段不会
null
。但是我没有将字段注释为非null,请查看我的更新。签出。因此,基本上,我可以抑制警告,对吗?您现在可以尝试忽略注释引起的警告。我认为它可能来自映射中的“对象”类型,我在Netbeans上尝试了它,但它没有向我显示警告。请随时告诉我你的最新情况
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!");
                    }
                });
            }
        }
    }
});