Firebase where子句中的'Field.subField'没有匹配的文档。
Firebase where子句中的'Field.subField'没有匹配的文档。
我正在使用JavaScript编写一个Google Cloud函数。在onWrite函数中,我试图通过在'subscription'集合上使用where子句来检索订阅列表。每个订阅文档的结构如下所示:
我需要在where子句中使用'ToUser'下的Ref字段,以便将其与我从onWrite云函数触发器获得的'userRef'进行匹配,它的结构如下所示:
这是我尝试查询订阅集合的js代码:
// 2. 使用上述id查询订阅集合中的'ToUser',以获取订阅者列表
let subscriptions = db.collection("subscriptions")
let subscribers = subscriptions.where('ToUser.Ref', '==', userRef).get()
.then(snapshot => {
if (snapshot.empty) {
console.log('没有匹配的文档。');
return;
}
var subs = []
snapshot.forEach( sub => {
console.log("Sub : " + JSON.stringify(sub.FromUser.Ref) )
//subscribers.append(sub.val().FromUser)
})
return subs
}).catch(err => {
console.log('获取文档时出错:', err);
});
调用.get().then()的结果是snapshot为空,并调用console.log('没有匹配的文档。')。
Firebase where clause with 'Field.subField' no matching documents
问题原因:在使用Firebase的where子句时,可能会出现'Field.subField'没有匹配文档的情况。这通常是因为在比较引用时,没有传递一个实际的DocumentReference对象。
解决方法:确保在比较引用时传递一个实际的DocumentReference对象,可以通过以下步骤解决问题:
1. 创建一个DocumentReference对象,例如:
let userRef = db.doc("/users/0e2qgHKZokSb9l02EywrEmJNhVd2")
2. 在where子句中使用这个DocumentReference对象进行比较,例如:
let subscriptions = db.collection("subscriptions") let subscribers = subscriptions.where('ToUser.Ref', '==', userRef).get()
通过以上步骤,您应该能够成功使用Firebase的where子句,并避免出现'Field.subField'没有匹配文档的问题。感谢Frank提供的解答!