在 NoSQL 中,您必须按照应用程序想要使用的方式对数据进行建模。因此,如果您需要用户参与的对话列表,则应将该列表保存在数据库中:
/conversationMessages
$conversationId
$messageId
text: "Hello world"
sender: "uid of sender"
name: "name of sender"
/userConversations
$uid
$conversationId1: true
$conversationId2: true
有了这个,您可以轻松查找每个用户参与的对话列表,然后为其中一个加载消息。您可能还希望为每个对话保留一个单独的元数据列表:
/conversationMetadata
$conversationId
lastUpdated: timestamp (set with ServerValue.TIMESTAMP)
title: "name of our chat room"
这样,您可以通过加载他们的对话 id 然后加载每个对话的元数据来显示用户的对话列表:
var ref = database.ref().child("userConversations").child(auth.uid);
ref.on('child_added', function(conversationKey) {
var conversationRef = database.ref().child("conversationMetadata").child(conversationKey.key);
conversationRef.once('value', function(metadataSnapshot) {
console.log(metadataSnapshot.val());
});
});
尝试将 SQL 知识映射到 NoSQL 数据库会导致学习困难。我强烈建议阅读Firebase 文档的相关部分和这篇关于 NoSQL 数据建模的文章。