множественный запрос где в firestore queryBuilder - PullRequest
1 голос
/ 19 апреля 2020

Я только сегодня заметил, что всякий раз, когда я хочу сделать запрос к базе данных, я получаю ошибку, которая на самом деле не имеет смысла для меня, и запросы просто перестают работать. Несколько недель он работал нормально go.

Неверный запрос. Все, где фильтры с неравенством (lessThan, lessThanOrEqual, moreThan или moreThanOrEqual) должны находиться в одном поле. Но у вас есть фильтры неравенства для 'value1' и 'value2')

  Stream<List<MyModel>> myStream(
      {MyFilter filter, String category}) {
    return _service.collectionsStream(
        path: APIPath.tools(cid, category),
        queryBuilder: filter != null
            ? (query) => query
                .where('value1', isGreaterThan: filter.minValue1)
                .where('value1', isLessThan: filter.maxValue1)
                .where('value2', isLessThan: filter.maxValue2)
                .where('value2', isGreaterThan: filter.minValue2)
            : null,
        builder: (data, documentID) => MyModel.fromMap(data, documentID),
        sort: (lhs, rhs) => lhs.value1.compareTo(rhs.value1));
  }

Я что-то не так делаю? Что означает эта ошибка и почему я не получил ее в прошлый раз?

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

С помощью firebase вы не можете делать запросы по нескольким полям документа. Таким образом, в вашем случае вы не можете выполнить запрос к «value1» И «value2», вам нужно выполнить запрос к «value1», а затем отфильтровать внутренний запрос, чтобы он соответствовал «value2».

Пример:

//your query code 
queryBuilder: filter != null
            ? (query) => query             
                .where('value2', isGreaterThan: filter.minValue2)
                .where('value2', isLessThan: filter.maxValue2)
                ...
            : null,
//your query code

myQuery = querySnapshot.documents.where((document) => document.data['value1'] > filter.minValue1).toList();
0 голосов
/ 19 апреля 2020

Запрос Firestore может содержать только реляционные условия (>, <, et c) для одного поля. Из документации ограничения запросов :

Запросы с фильтрами диапазона по разным полям не поддерживаются.

Так что вам придется выбирать, какие поле, в котором вы хотите, чтобы Firestore выполнял фильтр диапазона. Затем вам придется выполнить другие действия в коде приложения.

Чтобы узнать больше о том, почему существует этот предел, и о работе в рамках ограничений Firestore для реализации сценариев использования, я настоятельно рекомендую ознакомиться с видеорядом Знакомство с Cloud Firestore .

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