【问题标题】:Query firestore by inequality按不等式查询firestore
【发布时间】:2018-04-01 20:32:54
【问题描述】:

我知道这可能与 Firestore: how to perform a query with inequality / not equals 重复,但我真的没有从那个问题中得到我想要的答案。

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 reactjs firebase redux google-cloud-firestore


    【解决方案1】:

    2020 年 9 月更新:v7.21.0 引入了对不等于 (!=) 查询的支持! 这意味着您可以简单地这样做:

    const tasks = await db.collection('tasks')
          .where('owner', '!=', `/users/${uid}`)
          .get();
    

    原答案

    Doug 对这些问题的回答表明,您需要使用两个单独的查询来获得结果:一个用于 db.collection('tasks').where('owner', '&gt;', `/users/${uid}`) 一个用于db.collection('tasks').where('owner', '&lt;', `/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 但除此之外,一切都很好!
    • 如何确保我们在执行此操作时使用限制过滤器?我的收藏有很多文档,这样做可能会使它膨胀。
    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 2022-01-21
    • 2019-10-03
    • 2019-06-23
    • 1970-01-01
    • 2021-10-21
    相关资源
    最近更新 更多