使用复合查询字符串在 Firebase 中查找参与者的聊天
在 Firebase 中构建数据时,优化数据库访问以实现高效检索至关重要。在查询复杂关系时,这一点变得尤为重要。
原始查询问题
想象一个名为“chats”的 Firebase 表,其中包含参与者列表和聊天项目。目标是查找涉及指定用户名的所有聊天。不幸的是,当前查询:
this.af.database.list('chats', { query: { orderByChild: 'participants', equalTo: username, // How to check if participants contain username } });
无效。这是因为:
优化数据结构
要解决这些问题,请考虑通过在树的顶层存储类别并展平数据库结构来反转索引:
userChatrooms: { john: { chatRoom1: true, chatRoom2: true }, puf: { chatRoom1: true, chatRoom3: true } }
此结构允许您有效地查询特定用户的聊天室列表:
ref.child('userChatrooms').child('john')
使用 Cloud Firestore 进行复合查询
如果使用 Cloud Firestore,您可以利用其强大的功能数组包含运算符并将数组视为集合:
db.collection('chats').where('participants', 'array-contains', username)
此查询有效地查找包含指定用户作为参与者的聊天。
通过优化数据结构并采用适当的查询技术,您可以显着提高复杂关系场景下 Firebase 查询的性能。
以上是如何高效地查询 Firebase 中涉及特定参与者的聊天?的详细内容。更多信息请关注PHP中文网其他相关文章!