Firestore OrderBy和冲突之处

时间:2019-06-15 20:59:49

标签: javascript firebase google-cloud-firestore

我可以从Firestore数据库中简单地获取数据,但是我想使用一些排序和条件条件对数据进行分页。因此,我尝试使用一些基本的过滤器来获取数据,但是面对错误,在文档https://firebase.google.com/docs/firestore/query-data/order-limit-data中,该文档仅针对范围<,<=,>,> =应该使用orderBy以及同一字段的where,但我只需要完全匹配(==)

node v8.12.0,表达,firebase函数

 model.collection
        .orderBy("dateCreated", 'desc')//timeStamp
        .where('tenantId', '==', 'f8XnOVUKob5jZ29oM9u9')  
        .limit(10)
        .get()
        .then((snapshot) => {
          res.send(snapshot);
        }).catch((error) => res.send(error));

遇到下一个错误

{
    "code": "failed-precondition",
    "name": "FirebaseError"
}

我只有在分别使用where或orderBet时才有结果,但不能同时使用

3 个答案:

答案 0 :(得分:1)

使用compound queries时,您需要创建一个index for your queries。您的查询失败,因为您没有为其创建索引

dateCreated
tenantId

您的索引标签应具有与以下内容相似的内容,并带有索引字段。

index

答案 1 :(得分:0)

还有一件事

您应该先使用where,然后再起诉orderby

代替此:

-> 1 : (4 : [])

您应该这样写:

db.collection('users').orderBy('createat','desc').where('state','!==','true')

我不知道这是什么原因,但这对我来说是有效的

答案 2 :(得分:0)

您可以使用 orderBy 方法对数据进行排序。关于排序数据只有一个不太明显的限制——当您使用范围比较(<、<=、>、>=)时,您只能通过查询的参数对数据进行排序。因此,在我们的案例中,当我们获取 2021 年之后发布的模型时,我们只能按发布日期(即升序)对其进行排序。

$model.collection
            .where('dateCreated', '>', '27-3-2021') 
            .orderBy("dateCreated", 'desc')//timeStamp
            .limit(10)
            .get()
            .then((snapshot) => {
              res.send(snapshot);
            }).catch((error) => res.send(error));