Запрос двух ближайших дат с Firestore не работает - PullRequest
0 голосов
/ 28 января 2019

Я делаю чат-чат по бронированию, и я хочу знать две ближайшие даты бронирования, если одна из них недоступна.

Я пытался набрать

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

Но этовозвращается пустым все время, это работа, когда дважды не указано где, но когда я добавляю другой оператор where для создания! =, возвращается пустое.Как я могу заставить это работать?И если это больше невозможно, какой подход я могу сделать?я хочу указать ближайшую дату к ожидаемой дате бронирования, иногда ближайшую к вершине, а иногда ближайшую к боту, поэтому я действительно хочу выполнить этот запрос.

1 Ответ

0 голосов
/ 28 января 2019

Если вы добавляете несколько условий к запросу в 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) {
          ...

Как вы можете видеть, он использует то же количество запросов, что и у вас, поскольку я объединил проверку на равенство впервый запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...