此问题在此处已有答案:
Firebase query if child of child contains a value(1个答案)
14小时前就关门了。
我试图获取所有在其contactLists对象中具有特定listId的用户。我的firebaserealtime数据库结构如下:
user:
john:
contactLists:
-NIOsvb: true,
我在数据库中有其他用户,我想获取所有在其contactLists对象中包含-NIOsvb的用户。这是我尝试过的方法(listId作为参数传递):
const snapshot = await get(query(ref(db, "users"), orderByChild("contactLists"), equalTo(listId)))
我希望得到所有在contactList中有这个id的用户对象。但是,snapshot的值是null。如果有任何建议,我将不胜感激,因为我对Firebase函数没有太多经验。
2条答案
按热度按时间e0bqpujr1#
要获取所有在contactLists对象中包含某个
listId
的用户,可以使用Firebase Realtime Database查询对象的orderByChild()
和equalTo()
方法。这段代码将检索数据库中users节点上的数据快照,并且只包括在其
contactLists
对象中具有listId
的用户。请注意,
orderByChild()
和equalTo()
方法要求属性的名称作为字符串进行查询,而值作为值进行匹配。在代码中,您使用的是orderByChild("contactLists")
,它试图查询每个用户对象上名为contactLists
的属性。但是,此属性实际上是一个对象,不是属性。若要查询contactLists
对象的-NIOsvb
属性,您应该改用下列程式码:这将查询
contactLists
对象得-NIOsvb
属性,并且仅返回此属性得值为true得用户.同样值得注意的是,由于要在数据库中查询特定的值,因此不需要使用
orderByChild()
方法,只需使用equalTo()
方法即可,如下所示:此代码与上一个示例具有相同的效果,但更简单、更直观。
ltskdhd12#
您用于获取联系人列表中具有特定listId的用户的查询似乎存在一些问题。以下是一些建议,可帮助您修复该查询:
下面是如何使用这些方法修复查询的示例:
此查询将从contactLists.-NIOsvb字段的值为true的用户集合中选择所有文档。此查询将返回QuerySnapshot对象,您可以循环访问该对象以访问匹配的文档。