我使用了用于标识用户组的文档集合。我的意图是仅使用用户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还是应该做些其他事情?
答案 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 中查看我的答案。