使用Firestore查询两个临近的日期

时间:2019-01-28 14:54:52

标签: javascript node.js firebase google-cloud-firestore

我正在预订聊天机器人 如果一个日期不可用,我想知道两个附近的可预订日期。

我尝试过

db.collection("horaries")
            .where("startat", "==", dateTime)
            .get()
            .then(function(querySnapshot) {
                if (querySnapshot.empty) {
                    return db.collection("horaries")
                        .where("startat", "<", dateTime)
                        .where("startat", ">", dateTime)

但是它一直都在返回空,当两次没有where时它是工作的,但是当我添加另一个where子句以使!=子句时,它就返回空。 我该如何运作? 如果这不可能了, 我该怎么办? 我想给预计的预订日期提供接近日期,有时最接近它在顶部,有时最接近它在机器人上,所以我真的很想做这个查询。

1 个答案:

答案 0 :(得分:1)

如果您在Firestore中向查询添加多个条件,则这些条件将与AND操作结合使用。因此,您的查询要求horariesdateTime之前开始,在dateTime之后开始。这是一个空集,因为在同一时间之前和之后都不能有单个值。

获取单个最接近商品的常用方法是组合两个查询:一个查询在之前查询第一个项目,而另一个在之后查询第一个项目:

db.collection("horaries")
  .where("startat", "<=", dateTime)
  .get()
  .then(function(querySnapshot) {
    if (querySnapshot.empty) {
      db.collection("horaries")
        .where("startat", ">", dateTime)
        .get()
        .then(function(querySnapshot) {
          ...

如您所见,由于我将相等性检查合并到第一个查询中,因此它使用的查询数量与您已经使用的查询数量相同。