javascript - 如何从 firebase 集合中获取不等于给定 ID 的第一个文档 ID?

标签 javascript firebase asynchronous google-cloud-firestore

我有'users'集合,其中包含每个用户ID的文档。我还使用经过身份验证的用户 ID(匿名登录)将当前用户的 ID 存储在 userID 变量中。

我需要根据最低值的计数器(此集合中的文档数据项)获取一个文档 ID(不是文档数据),并将其存储在名为“receiverID”的变量中,但如果文档 ID 等于当前用户的 ID,然后我想获取下一个可用的 ID。

例如,如果我的平台上有 3 个用户(A、B 和 C),并且存在以下“计数器”值:

  • A:1,B:2,C:3

理论上,当A查询集合时,他们会得到自己的文档ID。然后,我需要获取“用户”集合中可用的第二个文档。

我已经开始执行以下操作,但遇到了困难:

receiverID = db.collection('users').orderBy('Questions Received','asc').limit(1)

此外,这是在事件监听器上触发的(当用户提交问题时),因此必须在函数的下一部分之前解析“receiverID”。这就是我的事件监听器的样子:

const sayForm = document.querySelector('#say-form');
sayForm.addEventListener('submit', (e) => {
    e.preventDefault();

    db.collection('message').add({
        message: sayForm.sayInput.value,
        time: firebase.firestore.FieldValue.serverTimestamp(),
        sender: userID,
        currentReceiver: receiverID,
        received: 1
    })
    .catch(function(error) {
        console.error("Error adding document: ", error);
    });
});

最佳答案

我通过执行以下操作解决了这个问题:

function getNextReceiver() {
  db.collection('users')
    .orderBy('Messages Received','asc')
    .limit(2)
    .get()
    .then(querySnapshot => {
      let x = querySnapshot.docs[0].id;
      let y = querySnapshot.docs[1].id;
      if (x == userID) {
        receiverID = y
      } else {
        receiverID = x;
      }
    });
    
}

getNextReceiver();

通过将搜索结果限制为 2 并将它们保存在变量中,我能够与“userID”进行比较,并将“receiverID”相应地设置为不匹配的结果。

关于javascript - 如何从 firebase 集合中获取不等于给定 ID 的第一个文档 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62649279/

相关文章:

javascript - Phonegap - iOS - 谷歌地图 "Sorry no imagery here"

javascript - 用正方形构建金字塔的算法

javascript - 如何在jquery中实现mouseleave

javascript - 列出 firebase 中具有规则的所有项目

Android Firebase 数据库加载更快

javascript - tinyMCE表格编辑问题

javascript - Firebase:为什么 `onAuthStateChanged` 总是返回一个用户?

javascript - 非法 break 语句 (Node.js)

java - 如何知道所有异步 HTTP 调用已完成

c# - 尝试了解 c# 中的新异步功能