簡體   English   中英

分開的查詢,而不是Firestore中的多個where子句

[英]Separate Queries Instead Multiple Where Clause in Firestore

我想用兩個參數查詢Firebase Firestore數據集合。

集合:動物

"animals": {
   "1": {
      "animal1": "cat",
      "animal2": "dog",
      "animal3": "",
      "animal4": ""
   },
   "2": {
      "animal1": "dog",
      "animal2": "cat",
      "animal3": "",
      "animal4": ""
   },
   "3": {
      "animal1": "cat",
      "animal2": "bird",
      "animal3": "dog",
      "animal4": ""
   },
   "4": {
      "animal1": "wolf",
      "animal2": "dog",
      "animal3": "bird",
      "animal4": ""
   },
   "5": {
      "animal1": "turtle",
      "animal2": "dog",
      "animal3": "wolf",
      "animal4": "cat"
   },
   "6": {
      "animal1": "dog",
      "animal2": "wolf",
      "animal3": "turtle",
      "animal4": "bear"
   },
   "7": {
      "animal1": "spider",
      "animal2": "beatle",
      "animal3": "butterfly",
      "animal4": "Cat"
   }
}

我想獲取包括catdog的列表數據。 有信息在這里 邏輯或查詢。 在這種情況下,您應該為每個OR條件創建一個單獨的查詢,並將查詢結果合並到您的應用中。

我不知道我需要多少個單獨的查詢?

let param1 = 'cat';
let param2 = 'dog';

let query1 = db.collection('animals').where('animal1', '==', param1);
let query2 = db.collection('animals').where('animal2', '==', param1);
let query3 = db.collection('animals').where('animal3', '==', param2);
let query4 = db.collection('animals').where('animal4', '==', param3);

如前所述,“您應該為每個OR條件創建一個單獨的查詢,並將查詢結果合並到您的應用中”。 由於使用數據模型,您有4個字段( animal1animal4 ),因此需要為要測試的每個param值創建4個查詢。

因此,在2個參數的情況下,如下所示:

let param1 = 'cat';
let param2 = 'dog';

您將必須合並2 * 4查詢的結果...。

如果更改數據模型並使用數組存儲animal值,則有可能減少此數字。 然后,您可以利用array_contains運算符。

建議的數據模型:

"animals": {
   "1": {
      "animalArray": 
          [
             0: "cat",
             1: "dog"
          ] 
   },
   "2": {
      "animalArray": 
          [
             0: "turtle",
             1: "dog",
             2: "wolf",
             3: "bear",
          ]
   }
   .....
}

在我們的兩個params示例中,您僅需要兩個查詢,如下所示:

let query1 = db.collection('animals').where("animalArray", "array-contains", param1);
let query2 = db.collection('animals').where("animalArray", "array-contains", param2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM