firebase google 或查询支持或任何替代解决方案
firebase google or query support or any alternative solution
我们刚刚开始为我们的新应用探索 Firebase。该应用程序基本上需要用户之间的聊天和群聊。
对于我们正在创建的聊天应用程序:MessageThread(id, User:userA, User:userB, UserGroup:group, Array:deletedBy, ...)
主要问题是 firebase 不支持我的用例中需要的 OR 查询和 IN 查询。例如:
访问用户对话列表的虚拟查询:
获取 MessageThread(s) where (currentUser.id==userA.id) OR (currentUser.id==userB.id) OR (currentUser.id IN group.members)
我缺少了解 Firebase 的东西?设计我们的数据库来解决这个问题的其他替代方法是什么?
否SQL 您必须按照您的应用使用数据的方式对数据进行建模。因此,如果您需要用户参与的对话列表,您应该将该列表保存在数据库中:
/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 数据库会导致学习困难。我强烈推荐阅读 relevant section of the Firebase documentation and this article about NoSQL data modeling.
我们刚刚开始为我们的新应用探索 Firebase。该应用程序基本上需要用户之间的聊天和群聊。
对于我们正在创建的聊天应用程序:MessageThread(id, User:userA, User:userB, UserGroup:group, Array:deletedBy, ...)
主要问题是 firebase 不支持我的用例中需要的 OR 查询和 IN 查询。例如:
访问用户对话列表的虚拟查询: 获取 MessageThread(s) where (currentUser.id==userA.id) OR (currentUser.id==userB.id) OR (currentUser.id IN group.members)
我缺少了解 Firebase 的东西?设计我们的数据库来解决这个问题的其他替代方法是什么?
否SQL 您必须按照您的应用使用数据的方式对数据进行建模。因此,如果您需要用户参与的对话列表,您应该将该列表保存在数据库中:
/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 数据库会导致学习困难。我强烈推荐阅读 relevant section of the Firebase documentation and this article about NoSQL data modeling.