如何访问Firebase双重嵌套对象属性?[duplicate]

cwdobuhd  于 2022-12-04  发布在  其他
关注(0)|答案(2)|浏览(129)

此问题在此处已有答案

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函数没有太多经验。

e0bqpujr

e0bqpujr1#

要获取所有在contactLists对象中包含某个listId的用户,可以使用Firebase Realtime Database查询对象的orderByChild()equalTo()方法。

const snapshot = await get(query(ref(db, "users"), orderByChild("contactLists"), equalTo(listId)))

这段代码将检索数据库中users节点上的数据快照,并且只包括在其contactLists对象中具有listId的用户。
请注意,orderByChild()equalTo()方法要求属性的名称作为字符串进行查询,而值作为值进行匹配。在代码中,您使用的是orderByChild("contactLists"),它试图查询每个用户对象上名为contactLists的属性。但是,此属性实际上是一个对象,不是属性。若要查询contactLists对象的-NIOsvb属性,您应该改用下列程式码:

const snapshot = await get(query(ref(db, "users"), orderByChild("contactLists/-NIOsvb"), equalTo(true)))

这将查询contactLists对象得-NIOsvb属性,并且仅返回此属性得值为true得用户.
同样值得注意的是,由于要在数据库中查询特定的值,因此不需要使用orderByChild()方法,只需使用equalTo()方法即可,如下所示:

const snapshot = await get(query(ref(db, "users"), equalTo(true), "contactLists/-NIOsvb"))

此代码与上一个示例具有相同的效果,但更简单、更直观。

ltskdhd1

ltskdhd12#

您用于获取联系人列表中具有特定listId的用户的查询似乎存在一些问题。以下是一些建议,可帮助您修复该查询:

  • orderByChild方法应该与属性名称一起使用,而不是与整个对象一起使用。在您的情况下,您可以使用orderByChild(“contactLists.-NIOsvb”),依使用者contactLists对象中的-NIOsvb属性来排序使用者。
  • equalTo方法应与值一起使用,而不是与整个对象一起使用。在您的情况下,可以使用equalTo(true)来匹配contactLists对象中具有-NIOsvb属性且值为true的用户。
  • 使用orderByChild和equalTo方法时,需要按正确的顺序指定要查询的属性和值。在您的情况下,可以使用orderByChild(“contactLists.-NIOsvb”).equalTo(true)查询在其contactLists对象中具有值为true的-NIOsvb属性的用户。

下面是如何使用这些方法修复查询的示例:

const snapshot = await get(
  query(
    ref(db, "users"),
    orderByChild("contactLists.-NIOsvb").equalTo(true)
  )
);

此查询将从contactLists.-NIOsvb字段的值为true的用户集合中选择所有文档。此查询将返回QuerySnapshot对象,您可以循环访问该对象以访问匹配的文档。

相关问题