在 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 云函数在 Flutter 中返回 null,因为它仍在运行
如何使用 Swift 在 Firebase 中使用 equalTo 查询查找子节点? [复制]
getGeoPoint() 方法在调用时返回 null。 Firebase 集合中有超过 1 个文档