Я знаю, что это может быть дубликат Firestore: как выполнить запрос с неравенством / не равно, но я действительно не получил ответа на этот вопрос.
Firestore не принимает оператор неравенства !=.
Предположим, я хочу запросить по uid не мои задачи.
Запросить созданные мной задачи легко, так как мне нужно использовать только ==.
У меня есть следующий код.
export default function fetchTasks () {
return async (dispatch) => {
const tasks = await db.collection('tasks')
.where('owner', '>', `/users/${uid}`)
.where('owner', '<', `/users/${uid}`)
.get()
const taskList = []
tasks.forEach((task) => {
taskList.push(task.data())
})
dispatch({
type: 'FETCH_TASKS_FULFILLED',
payload: taskList
})
}
}
Кажется, я не могу получить эту работу. Любые предложения будут ценны. Спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Обновление сентябрь 2020 г .:v7.21.0 представил поддержку запросов не равно (!=)!
Это означает, что вы можете просто сделать:
const tasks = await db.collection('tasks')
.where('owner', '!=', `/users/${uid}`)
.get();
В ответе Дуга на эти вопросы говорится, что вам нужно использовать два отдельных запроса для получения результатов: один для db.collection('tasks').where('owner', '>', `/users/${uid}`).
и один для db.collection('tasks').where('owner', '<', `/users/${uid}`). Затем вам нужно будет объединить результаты в коде на стороне клиента.
Так:
const tasks = await db.collection('tasks')
.where('owner', '<', `/users/${uid}`)
.get()
let taskList = []
tasks.forEach((task) => {
taskList.push(task.data())
})
tasks = await db.collection('tasks')
.where('owner', '>', `/users/${uid}`)
.get()
tasks.forEach((task) => {
taskList.push(task.data())
})
dispatch({
type: 'FETCH_TASKS_FULFILLED',
payload: taskList
})
Как убедиться, что при этом мы используем лимитный фильтр? В моей коллекции много документов, и это может раздуть ее.
Спасибо. это сработало! Я думал, что это сделает составной запрос, но безрезультатно. одна мелочь - вы забыли заменить
constнаlet, но в остальном все работает отлично!