在 Firebase 中查询现有节点返回 null

Posted

技术标签:

【中文标题】在 Firebase 中查询现有节点返回 null【英文标题】:Querying for existing nodes in Firebase is returning null 【发布时间】:2016-02-18 16:10:57 【问题描述】:

我的树形结构看起来像 FireBase 中的

书籍 用户 用户A_ID 用户B_ID 用户C_ID 用户名:@"" 用户邮箱:@"" UserBookReadCount:@""

在我去更新“BookReadCount”之前,我尝试使用以下代码查询该用户的存在。在

FQuery* query = [[userRef queryOrderedByKey] queryEqualToValue:userIDKey];
[query observeSingleEventOfType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot)
            
                NSLog(@"Snapshot value: %@", snapshot.value);
                if(snapshot.hasChildren)
                
                   // UserX_ID exists. Use 'updateChildValues' to update the data
                
                else
                
                   // UserX_ID does NOT exist. Use 'setValue' to create the data
                

            ];

如果用户不存在,我会使用“setValue”将新用户添加到此列表中。如果用户存在,那么我使用“updateChildValues”来更新用户数据。所有这一切都很好。

我面临的问题是查询。即使用户存在或不存在,上面的查询也总是返回null。

对我遗漏的显而易见的事情有什么想法吗?

【问题讨论】:

【参考方案1】:

有几件事。要测试 null 你真的应该

 if (snapshot.value == [NSNull null])

这是对您的代码稍作修改的实现,其中包括 NSNull 检查。

Firebase *ref = [self.myRootRef childByAppendingPath:@"users"];

FQuery *query = [[ref queryOrderedByKey] queryEqualToValue:@"UserC_ID"];

    [query observeSingleEventOfType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) 

        if (snapshot.value == [NSNull null]) 
            NSLog(@"was null");
         else 
            NSLog(@"key: %@    %@", snapshot.key, snapshot.value);
        
    ];

我设置了一个与您使用的结构相同的测试 Firebase,它可以正常工作;对不存在的用户 ID 返回 null,并在存在时返回节点 UserC_ID。

因此,也许您设置 userIDKey 的代码行为不端,或者您的 userRef 不可靠。

【讨论】:

这样你终于超过了 2K 大关。恭喜您获得新的(当之无愧的)权限! 啊,谢谢您的回复。我注意到我的 firebase ref 指向的是 userA_ID 而不是 users。现在工作正常。谢谢

以上是关于在 Firebase 中查询现有节点返回 null的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 快照返回 null

Firebase 云函数在 Flutter 中返回 null,因为它仍在运行

如何使用 Swift 在 Firebase 中使用 equalTo 查询查找子节点? [复制]

getGeoPoint() 方法在调用时返回 null。 Firebase 集合中有超过 1 个文档

Flutter firebase 登录用户在登录后返回 NULL currentUser

GraphQL 从 MySQL 连接查询返回 null