Firebase:查询数据从特定值开始

时间:2018-05-25 04:20:20

标签: ios objective-c firebase firebase-realtime-database

我使用Firebase进行聊天。

我希望从特定时间获取所有消息。 但我只从Firebase收到一条消息。

这是我的代码:

[[[_conversationDBRef queryOrderedByChild:@"time"] queryStartingAtValue:@(time)] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

        for (FIRDataSnapshot* child in snapshot.children) {
            NSDictionary* msgData = child.value;
            NSLog(@"msgData: %@", msgData);
        }
    }];

查询:

(lldb) po _conversationDBRef
https://xxxxx-xxxxxx.firebaseio.com/Strike-Fighter/messages/4_5

(lldb) po [[_conversationDBRef queryOrderedByChild:@"time"] queryStartingAtValue:@(time)]
(/Strike-Fighter/messages/4_5 {
    i = time;
    sp = "548914514.2122542";
})

数据 Data

1 个答案:

答案 0 :(得分:0)

由于您正在使用queryStartingAtValue进行查询,因此您只收到一个值。如果你想从约会收到你聊天的所有信息。您需要使用isGreaterThan

因此,如果您想从特定日期检索消息,则需要执行以下操作:

<强>公司的FireStore

[[[_conversationDBRef queryWhereField:@"time" isGreaterThan:@100000]
    queryOrderedByField:@"time"];

Firebase实时数据库

 [[[_conversationDBRef queryWhereField:@"time" queryStartingAtValue:@100000]
        queryOrderedByChild:@"time"];

您还可以限制要检索的邮件数量(例如,集成延迟加载),将queryLimitedTo添加到您的查询中。

我认为你的代码还可以。尝试使用queryOrderedByValue并查看https://firebase.google.com/docs/database/ios/lists-of-data

中的官方文档

无论如何,如果您的申请正在启动。我建议您将数据库更新到Firebase Firestore。它更易于使用,更具可扩展性,并且看起来Firebase团队将比REaltime更专注于它。

希望它能帮到你!