繁体   English   中英

带前缀的数组字段 Firestore 查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM