我可以从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时才有结果,但不能同时使用
答案 0 :(得分:1)
使用compound queries时,您需要创建一个index for your queries。您的查询失败,因为您没有为其创建索引
dateCreated
tenantId
您的索引标签应具有与以下内容相似的内容,并带有索引字段。
答案 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));