【问题标题】:firestore Check if id exists against an array of idsfirestore 针对 id 数组检查 id 是否存在
【发布时间】:2020-06-22 23:18:32
【问题描述】:

我使用 firebase firestore 为我的网站开发了一个简单的聊天应用程序。每个聊天会话都有一个 id

如果我有一个 id 数组

chat_sessions = ["q93XhadA9QQLu6X8yfZB", "YXEYISEI8b2iixCcP3VO", "GXrSZbtrmN5NcrtvjFYp"]

我想使用下面的代码获取所有 id 等于 chat_sessions 对象中任何 id 的文档。

return this.afs
    .collection('chats', ref => ref.where('uid','in_array',chat_sessions)).snapshotChanges...

但我没有得到任何结果。

我来自 PHP/MYSQL 背景 我想要实现的 PHP 等价物在 PHP 中将是这样的

if(in_array(uid,chat_sessions)){
      get(doc/uid)
      }

任何人都可以帮助我们根据数组中的 id 列表检查文档 id 的正确查询吗?谢谢!

【问题讨论】:

    标签: javascript firebase google-cloud-firestore angularfire2


    【解决方案1】:

    谢谢@frank van Puffelen。你几乎是对的。我应该使用in 而不是in_array

    ref.where(firebase.firestore.FieldPath.documentId(),'in_array',chat_sessions)
    

    没用。相反,我将 in_array 替换为 in

    ref.where(firebase.firestore.FieldPath.documentId(),'in',chat_sessions)
    

    这行得通!谢谢

    【讨论】:

      【解决方案2】:

      您的查询是:

      ref.where('uid','in_array',chat_sessions)
      

      这会根据chat_sessions 的值检查每个文档中名为uid 的字段。

      您似乎想根据数组检查每个文档的 ID,您可以这样做:

      ref.where(firebase.firestore.FieldPath.documentId(),'in_array',chat_sessions)
      

      【讨论】:

      • v9 中用于测试文档 ID 的等效项是什么? firebase.google.com/docs/reference/js/firestore_.fieldpath 似乎不是正确的选择...
      • 找到它:import {documentId} from "firebase/firestore"; ...where(documentId(), 'in', chat_sessions)firebase.google.com/docs/reference/js/firestore_#documentid
      【解决方案3】:

      我在 Firestore 上找到了其他东西,例如 "array-contains-any" 对于这种情况。

      也许现在更新了。

      【讨论】:

      • array_contains_any 已添加到最近的 Firestore 更新中。这在提出问题时不可用,但会接受它作为答案,因为它现在有效。谢谢库马尔
      【解决方案4】:

      更新

      嗨,firebase 最近做了一些更新,所以我发现了这个方法

      `

      const [products, setProduct] = useState([]);
      const ids = ['H11LlJsh3sObwORZhA0b','om9m0lU9HYWyOJZKvEdi','1AoHyHuSFcF01zoyXyTD','6xoBlxsRXUoyzBUcWl0F',
      'GJqthlmBGZaFAJqtC2jK','QNT3PxMfhNGg1RZnuqcq','RZgGoFZHyDAYaVZJWxGk','g4UO5P0EgtEqJnawwhXX','gyrZm8p0cEgJdDvTuB1g','mrscldfeYlkaSF151MpI',]
      
      useEffect(() => {
          const saveFirebaseTodos = [];      
          ids.forEach((element) => {
          fetchMyAPI()
          async function fetchMyAPI() {
              const q = query(collection(db, "a"), where('__name__', '==', element));
              const querySnapshot = await getDocs(q); 
              querySnapshot.forEach((doc) => {
              saveFirebaseTodos.push(({id: doc.id, ...doc.data()}));
              /*console.log(doc.id, " => ", doc.data());*/
              if (ids.length == saveFirebaseTodos.length) {
                  setProduct(saveFirebaseTodos) 
                  }
              });
          }})
      
      }, [])`
      

      通过这种方式,您可以检查您想要的数组中有多少元素(绕过firebase的10个元素限制)。

      希望可以帮助任何人:D

      【讨论】:

        猜你喜欢
        • 2019-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-22
        相关资源
        最近更新 更多