我正在预订聊天机器人 如果一个日期不可用,我想知道两个附近的可预订日期。
我尝试过
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子句以使!=子句时,它就返回空。 我该如何运作? 如果这不可能了, 我该怎么办? 我想给预计的预订日期提供接近日期,有时最接近它在顶部,有时最接近它在机器人上,所以我真的很想做这个查询。
答案 0 :(得分:1)
如果您在Firestore中向查询添加多个条件,则这些条件将与AND操作结合使用。因此,您的查询要求horaries
在dateTime
之前开始,在dateTime
之后开始。这是一个空集,因为在同一时间之前和之后都不能有单个值。
获取单个最接近商品的常用方法是组合两个查询:一个查询在之前查询第一个项目,而另一个在之后查询第一个项目:
db.collection("horaries")
.where("startat", "<=", dateTime)
.get()
.then(function(querySnapshot) {
if (querySnapshot.empty) {
db.collection("horaries")
.where("startat", ">", dateTime)
.get()
.then(function(querySnapshot) {
...
如您所见,由于我将相等性检查合并到第一个查询中,因此它使用的查询数量与您已经使用的查询数量相同。