簡體   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