Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Firestore中单独查询而不是多个Where子句_Javascript_Node.js_Firebase_Nosql_Google Cloud Firestore - Fatal编程技术网

Javascript 在Firestore中单独查询而不是多个Where子句

Javascript 在Firestore中单独查询而不是多个Where子句,javascript,node.js,firebase,nosql,google-cloud-firestore,Javascript,Node.js,Firebase,Nosql,Google Cloud Firestore,我想用两个参数查询firebase firestore数据收集 收藏:动物 "animals": { "1": { "animal1": "cat", "animal2": "dog", "animal3": "", "animal4": "" }, "2": { "animal1": "dog", "animal2": "cat", "animal3": "", "animal4"

我想用两个参数查询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"
   }
}
我想要获得包括猫和狗的列表数据。 有消息 逻辑或查询。在这种情况下,您应该为每个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);
正如您所指出的,“您应该为每个或条件创建一个单独的查询,并在应用程序中合并查询结果”。因为在数据模型中,有4个字段(
animal1
animal4
),所以需要为要测试的每个
参数
值创建4个查询

因此,对于2个参数,如下所示:

let param1 = 'cat';
let param2 = 'dog';
let query1 = db.collection('animals').where("animalArray", "array-contains", param1);
let query2 = db.collection('animals').where("animalArray", "array-contains", param2);
您必须合并2*4查询的结果

如果您更改数据模型并使用数组存储
动物
值,则有可能减少此数字。然后可以利用
数组\u contains
操作符

提议的数据模型:

"animals": {
   "1": {
      "animalArray": 
          [
             0: "cat",
             1: "dog"
          ] 
   },
   "2": {
      "animalArray": 
          [
             0: "turtle",
             1: "dog",
             2: "wolf",
             3: "bear",
          ]
   }
   .....
}
在我们的两个
参数的示例中,您只需要两个查询,如下所示:

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

谢谢你,雷诺。问题是我的数据模型结构。使用数组和数组包含似乎更好。另外,2*4查询对于性能来说非常繁重。。。