Firebase where子句中的'Field.subField'没有匹配的文档。

9 浏览
0 Comments

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('没有匹配的文档。')。

0
0 Comments

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提供的解答!

0