Я хочу выбрать из коллекции Firestore только статьи, написанные НЕ мной.
Это действительно так сложно?
В каждой статье есть поле "owner_uid".
Thats it:
Я просто хочу написать эквивалент "select * from articles where uid<>request.auth.uid"
Я хочу выбрать из коллекции Firestore только статьи, написанные НЕ мной.
Это действительно так сложно?
В каждой статье есть поле "owner_uid".
Thats it:
Я просто хочу написать эквивалент "select * from articles where uid<>request.auth.uid"
Firestore не обеспечивает проверку неравенства. Согласно документации:
Метод where() принимает три параметра: поле для фильтрации, операцию сравнения и значение. Сравнение может быть <, < =, ==, > , или > =.
Операции неравенства не масштабируются, как другие операции, которые используют index. Индексы Firestore подходят для запросов диапазона. С этим типом индекса для запроса неравенства бэкэнд все равно должен будет сканировать каждый документ в коллекции, чтобы придумать результаты, и это очень плохо для производительности, когда число документов растет.
Если вам нужно отфильтровать результаты для удаления определенных элементов, вы все равно можете сделать это локально.
У вас также есть возможность использовать несколько запросов для исключения отдельного значения. Что-то вроде этого, если вы хотите все, кроме 12. Запрос для значения < 12, затем запросите значение > 12, а затем объедините результаты в клиенте.
Из документации по пожарной базе
Запросы с предложением! =. В этом случае вы должны разделить запрос в запрос больше, чем запрос меньше. Например, хотя Предложение запроса, где ("age", "! =", "30") не поддерживается, вы можете получить один и тот же набор результатов, объединив два запроса, один с предложением где ("age", "& lt;", "30") и один с предложением where ("age", ">", 30).
Для Android это должно быть легко реализовано с помощью Task Api. Пример новичка:
FirebaseFirestore db = FirebaseFirestore.getInstance();
Query lessQuery = db.collection("users").whereLessThan("uid", currentUid);
Query greaterQuery = db.collection("users").whereGreaterThan("uid", currentUid);
Task lessQuery Task = firstQuery.get();
Task greaterQuery = secondQuery.get();
Task combinedTask = Tasks.whenAllSuccess(lessQuery , greaterQuery)
.addOnSuccessListener(new OnSuccessListener<List<Object>>() {
@Override
public void onSuccess(List<Object> list) {
//This is the list of "users" collection without user with currentUid
}
});
Кроме того, с этим вы можете объединить любой набор запросов.
Для веба есть rxfire
let query = docRef.where('role','>',user_role).where('role','<',user_role).get()
Это не функционирует как операция "не равно" в firestore со строковыми значениями