我试图弄清楚如何通过数组模拟查询值,但是如果按值分别完成每个查询,数据就会失去排序。
我们假设数据库具有以下格式:
在客户端,我有一组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)
之前有人遇到过这类问题吗?非常感谢任何建议!
答案 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());
});
});
});