在我的数据库中,我保存了该月23日的所有文档,如下图所示
即使我在第20天超过了开始日期,它也会返回空值。
这是我的查询摘要:
const documents = await admin.firestore()
.collection('orders')
.orderBy('payment_type')
.startAt('2020-06-22')
.endAt('2020-06-23')
.get()
我是Firebase的新手,所以我不知道我缺少什么,文档也帮不上什么忙。 另外,如果信息有帮助,我正在使用云功能。
答案 0 :(得分:1)
您传递给startAt
和endAt
的值必须与您用于订购的字段相对应。由于您要按Payment_type进行订购,因此开始值和结束值没有意义-他们正在寻找的值范围根本不匹配所有payment_type值。另外,除非您尝试进行pagination,否则使用startAt
和endAt
没有任何意义,
如果您尝试在两个日期之间进行范围查询,然后按付款类型对结果进行排序,那么使用现有数据的Firestore实际上是不可能的。您不能在与要订购的字段不同的字段上进行范围查询。请注意limitation in the documentation:
如果您包含具有范围比较(<,<=,>,> =)的过滤器,则您的 第一次订购必须在同一字段上:
citiesRef.where("population", ">", 100000).orderBy("population")
因此,您可以尝试按日期查询范围:
const documents = await admin.firestore()
.collection('orders')
.where('date', '>', '2020-06-22')
.where('date', '<', '2020-06-23')
.get()
如果需要,可以按付款方式在客户端上对结果进行排序。
答案 1 :(得分:0)
您要按payment_type
排序,这不是日期值。建议您将其更新为date
,以便相应的startAt
和endAt
函数将定位到正确的字段。 Documentation
const documents = await admin.firestore()
.collection('orders')
.orderBy('date')
.startAt('2020-06-22')
.endAt('2020-06-25')
.get()
此外,将endAt
的值扩展到6月24日。