[英]Array field Firestore query with prefix
是否可以查询 Firestore 集合以获取其数组字段具有特定前缀词的所有文档?
例如,
用户 A uid:uid000 地区列表:[ USA-CA, USA-NY]
用户 B uid:uid001 地区列表:[ USA-ALL, EU-FR]
用户 C uid: uid002 地区列表:[ASIA-JP, ASIA-CH]
当从 Firestore 和 select 'USA-' 获取上面的用户列表进行过滤时,我想获取其区域列表甚至包含以 'USA-' 开头的元素的所有用户
结果:用户列表:[用户A,用户B]
当从 Firestore 中获取上面的用户列表并选择“USA-”进行过滤时,我想获取其区域列表甚至包含以“USA-”开头的元素的所有用户
不,您不能使用数组来实现。 但是,如果允许稍微更改数据库结构,则可以获得相同的结果。 由于USA-
是 arrays 的公共元素,因此您应该考虑这样命名数组:
Firestore-root
|
--- users (collection)
|
--- uid000 (document)
| |
| --- USA: ["CA", "NY"]
|
--- uid001 (document)
| |
| --- USA: ["ALL"]
| |
| --- EU: ["FR"]
|
--- uid002 (document)
|
--- ASIA: ["JP", "NY"]
要查询文档中存在USA
数组的用户,请使用以下代码行:
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("products").whereNotEqualTo("USA", null).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId());
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
如您所见,我们查询USA
字段是否存在。 logcat 中的结果将是:
uid000
uid001
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.