我有'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/