Firestore:多个条件where子句

时间:2017-12-30 18:59:03

标签: javascript firebase google-cloud-firestore

例如,我的书籍列表中有动态过滤器,我可以设置特定的颜色,作者和类别。 此过滤器可以一次设置多种颜色和多个类别。

   Book > Red, Blue > Adventure, Detective.

我如何添加"其中"有条件?

  firebase
    .firestore()
    .collection("book")
    .where("category", "==", )
    .where("color", "==", )
    .where("author", "==", )

    .orderBy("date")
    .get()
    .then(querySnapshot => {...

4 个答案:

答案 0 :(得分:22)

正如您在API文档中看到的那样,collection()方法返回CollectionReference。 CollectionReference扩展QueryQuery.where()Query.orderBy()也会返回Query对象。所以你可以像这样重写你的代码:

var query = firebase.firestore().collection("book")
query = query.where(...)
query = query.where(...)
query = query.where(...)
query = query.orderBy(...)
query.get().then(...)

现在你可以输入条件来确定你想在每个阶段应用哪些过滤器。

答案 1 :(得分:2)

例如,有一个像这样的数组

const conditionList = [
  {
    key: 'anyField',
    operator: '==',
    value: 'any value',
  },
  {
    key: 'anyField',
    operator: '>',
    value: 'any value',
  },
  {
    key: 'anyField',
    operator: '<',
    value: 'any value',
  },
  {
    key: 'anyField',
    operator: '==',
    value: 'any value',
  },
  {
    key: 'anyField',
    operator: '==',
    value: 'any value',
  },
]

然后,您可以将要设置查询条件的集合放入此函数中。

function* multipleWhere(
  collection,
  conditions = [{ field: '[doc].[field name]', operator: '==', value: '[any value]' }],
) {
  const pop = conditions.pop()
  if (pop) {
    yield* multipleWhere(
      collection.where(pop.key, pop.operator, pop.value),
      conditions,
    )
  }
  yield collection
}

您将获得收集集查询的条件。

答案 2 :(得分:1)

除了@Doug Stevenson回答。当您有多个4328836344 4328835224时,有必要像我这样使它更具动态性。

stack0.other_stack

答案 3 :(得分:0)

async yourFunction(){
    const Ref0 = firebase.firestore().collection("your_collection").doc(doc.id)

    const Ref1 = appointmentsRef.where('val1', '==',condition1).get();
    const Ref2 = appointmentsRef.where("val2", "!=", condition2).get()

    const [snapshot_val1, snapshot_val2] = await Promise.all([Ref1, Ref2]);

    
    const val1_Array = snapshot_val1.docs;
    const val2_Array = snapshot_val2.docs;

    const globale_val_Array = val1_Array .concat(val2_Array );

    return globale_val_Array ;
  }



/*Call you function*/
this.checkCurrentAppointment().then(docSnapshot=> {
      docSnapshot.forEach(doc=> {
          console.log("Your data with multiple code query:", doc.data());
      });
    });