使用数组按值查询Firebase的替代方法

时间:2016-02-16 19:54:06

标签: firebase

我试图弄清楚如何通过数组模拟查询值,但是如果按值分别完成每个查询,数据就会失去排序。

我们假设数据库具有以下格式:

  • 帖子ID
    • 用户ID
    • datePosted

在客户端,我有一组userID: [id1,id2,id3]

我想通过datePosted对postID进行排序,按值查询,其中userID等于数组中的一个id。然后我想查询前5个帖子。 因此,这应该最多可以获得这些用户最近发布的5个帖子。

我已经读过您无法通过数组查询值,这意味着必须将每个用户ID分成单个查询(例如firebase equivalent to sql where in ()建议)。但是,如果我这样做,我将无法再通过datePosted在不同用户的帖子之间进行正确排序,并且必须下载所有帖子才能排序并获得前5个。

从本质上讲,我试图完成:   ref.queryOrderedByChild(" datePosted")。queryEqualToValue(array," userID")。queryLimitedToFirst(5)

之前有人遇到过这类问题吗?非常感谢任何建议!

1 个答案:

答案 0 :(得分:1)

我假设您正在尝试对社交网络进行建模,您可以在其中显示用户关注的人员的帖子。如果是这种情况,那就让我们称之为“墙”。

你可以用这种方式建模:

posts
  -Kjas0273471234
    title: "Alternatives to Firebase query by value with arrays"
    body: "..."
    uid: "Flyte27"
    timestamp: 1455655809614
  -Kjas0281386734
    title: "An interesting data model"
    body: "..."
    uid: "puf"
    timestamp: 1455655909614
walls
  Flyte27
    -Kjas0273471234: 1455655809614
    -Kjas0281386734: 1455655909614

所以在这个模型中,你的墙上有你所关注的人的帖子。我将值设置为时间戳,因为您可能希望按此顺序排序。

现在使用此结构,您可以查询并显示帖子:

ref.child('walls').child(auth.uid).orderByValue().on('value', function(keys) {
  keys.forEach(function(keySnapshot) {
    ref.child('posts').child(keySnapshot.key()).once('value', function(postSnapshot) {
      console.log(postSnapshot.val());
    });
  });
});