Javascript 或Firebase中的查询

Javascript 或Firebase中的查询,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在尝试建立一个信息系统。我计划收集消息,然后根据发送者和接收者查询消息。为了做到这一点,我需要查询例如:由Bob发送并由Tony接收的所有消息,以及由Tony发送并由Bob接收的所有消息。 我很不清楚如何做这一点或声明。 到现在为止,我有 MessageRef.once('value', function(dataSnapshot) { console.log(dataSnapshot.val()); }); 返回所有消息。然后我可以做一个forEach,但它似乎不是很有效。你们有什么

我正在尝试建立一个信息系统。我计划收集消息,然后根据发送者和接收者查询消息。为了做到这一点,我需要查询例如:由Bob发送并由Tony接收的所有消息,以及由Tony发送并由Bob接收的所有消息。 我很不清楚如何做这一点或声明。 到现在为止,我有

MessageRef.once('value', function(dataSnapshot) {
  console.log(dataSnapshot.val());
});
返回所有消息。然后我可以做一个forEach,但它似乎不是很有效。你们有什么建议吗

另外,你有没有想过我建立的信息系统模型是否比拥有聊天室更好


谢谢

Firebase当前只能查询单个子属性。因此,如果要查询多个属性,必须将它们合并为一个:

Messages
  -DFHJ3498ua
    from: Tony
    to: Bob
    from_to: Tony_Bob
    message: "Hello Bob, this is Tony"
  -DFHJ3598uz
    from: Bob
    to: Tony
    from_to: Bob_Tony
    message: "Hello Tony, What can I do for you?"
  -EFHJ3498ua
    from: Tony
    to: Bob
    from_to: Tony_Bob
    message: "Can you help me with this Firebase query?"
然后,您可以使用以下命令查询从Bob到Tony的消息:

var ref = new Firebase('https://your.firebaseio.com/Messages');
var query = ref.orderByChild('from_to').equalTo('Bob_Tony');
query.on('value', function(snapshot) {
  console.log(snapshot.val()); // all messages from Bob to Tony
});

在聊天类应用程序中,您可能需要考虑实际使用发送器-接收器对作为密钥:

Messages
  from_Bob_to_Tony
    -DFHJ3598uz
      from: Bob
      to: Tony
      message: "Hello Tony, What can I do for you?"
  from_Tony_to_Bob
    -DFHJ3498ua
      from: Tony
      to: Bob
      message: "Hello Bob, this is Tony"
    -EFHJ3498ua
      from: Tony
      to: Bob
      message: "Can you help me with this Firebase query?"
使用此数据结构,您不必运行查询来获取相关消息,但可以直接查找

var ref = new Firebase('https://your.firebaseio.com/Messages');
var query = ref.child('from_Bob_to_Tony');
query.on('value', function(snapshot) {
  console.log(snapshot.val()); // all messages from Bob to Tony
});

Firebase当前只能查询单个子属性。因此,如果要查询多个属性,必须将它们合并为一个:

Messages
  -DFHJ3498ua
    from: Tony
    to: Bob
    from_to: Tony_Bob
    message: "Hello Bob, this is Tony"
  -DFHJ3598uz
    from: Bob
    to: Tony
    from_to: Bob_Tony
    message: "Hello Tony, What can I do for you?"
  -EFHJ3498ua
    from: Tony
    to: Bob
    from_to: Tony_Bob
    message: "Can you help me with this Firebase query?"
然后,您可以使用以下命令查询从Bob到Tony的消息:

var ref = new Firebase('https://your.firebaseio.com/Messages');
var query = ref.orderByChild('from_to').equalTo('Bob_Tony');
query.on('value', function(snapshot) {
  console.log(snapshot.val()); // all messages from Bob to Tony
});

在聊天类应用程序中,您可能需要考虑实际使用发送器-接收器对作为密钥:

Messages
  from_Bob_to_Tony
    -DFHJ3598uz
      from: Bob
      to: Tony
      message: "Hello Tony, What can I do for you?"
  from_Tony_to_Bob
    -DFHJ3498ua
      from: Tony
      to: Bob
      message: "Hello Bob, this is Tony"
    -EFHJ3498ua
      from: Tony
      to: Bob
      message: "Can you help me with this Firebase query?"
使用此数据结构,您不必运行查询来获取相关消息,但可以直接查找

var ref = new Firebase('https://your.firebaseio.com/Messages');
var query = ref.child('from_Bob_to_Tony');
query.on('value', function(snapshot) {
  console.log(snapshot.val()); // all messages from Bob to Tony
});


请提及您已尝试使用的SQLexecute@CedricSimon:Firebase不是SQL数据库。我的错误。读过火鸟而不是火碱;这听起来像是一个最好用更好的数据结构来解决的问题,即将消息存储在适当的结构中,这样就不需要用户进行查询等。请参阅Firechat:和Firefeed:的示例。请提及您已经尝试使用的SQLexecute@CedricSimon:Firebase不是SQL数据库。我的错误。读过火鸟而不是火碱;这听起来像是一个最好用更好的数据结构来解决的问题,即将消息存储在适当的结构中,这样就不需要按用户进行查询,等等。参见Firechat:和Firefeed:示例。谢谢:快速问题:如果我使用发送方-接收方对,我需要执行两个从T到B和B到T的查询,将它们合并并按时间进行排序。我不应该按人的房间来组织它吗?如果我使用房间系统,我应该有一个房间集合,其中每个项目都有一个长长的消息数组,还是应该创建一个引用房间的消息集合?最好的模式是什么?你的问题是Tony发送的消息和Bob接收的消息,所以这就是我在回答中建模的。如果您想要Tony和Bob之间的消息,您可以为此建模,例如,在将其放入密钥之前对名称进行排序。所以在Bob和Tony之间有一个类似messages的键。如果你想模拟聊天室,就模拟聊天室。如果您希望参与者之间的聊天室是持久的,这样当相同的人再次开始聊天时,他们会看到他们以前的消息,如果您基于用户名/ID建模,这将是最简单的。但是所有这些都是非常广泛的,如果不检查您的所有用例,就不可能为您确定最佳答案,因为StackOverflow不是这个论坛的主题。从看似正确的开始,适应新的见解。或者看一看或者这是两个不同的字段如果查询是bob或julie怎么办?谢谢:快速问题:如果我做发送方-接收方对,我需要做两个从T到B和B到T的查询,将它们合并并按时间排序。我不应该按人的房间来组织它吗?如果我使用房间系统,我应该有一个房间集合,其中每个项目都有一个长长的消息数组,还是应该创建一个引用房间的消息集合?最好的模式是什么?你的问题是Tony发送的消息和Bob接收的消息,所以这就是我在回答中建模的。如果您想要Tony和Bob之间的消息,您可以为此建模,例如,在将其放入密钥之前对名称进行排序。所以在Bob和Tony之间有一个类似messages的键。如果你想模拟聊天室,就模拟聊天室。如果您希望参与者之间的聊天室是持久的,这样当相同的人再次开始聊天时,他们会看到他们以前的消息,如果您基于用户名/ID建模,这将是最简单的。但是所有这些都是非常广泛的,如果不检查您的所有用例,就不可能为您确定最佳答案,因为StackOverflow不是这个论坛的主题。从看似正确的开始,适应新的见解。或者看看或者这是两个不同的字段如果查询是如果是bob或julie怎么办?