Ios Firebase查询-我得到某种类型的NSArray作为结果(只是有时)
我有一个像这样的firebase数据库:Ios Firebase查询-我得到某种类型的NSArray作为结果(只是有时),ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我有一个像这样的firebase数据库: userIndexes -- 1: uid1 -- 2: uid2 -- 3: uid3 DataService.sharedInstance.DB_REF_USERS_INDEXED_BY_ID.queryOrderedByKey().queryStarting(atValue: "2").queryLimited(toFirst: 1).observeSingleEvent(of: .value, with: { (snapshot) in
userIndexes
-- 1: uid1
-- 2: uid2
-- 3: uid3
DataService.sharedInstance.DB_REF_USERS_INDEXED_BY_ID.queryOrderedByKey().queryStarting(atValue: "2").queryLimited(toFirst: 1).observeSingleEvent(of: .value, with: { (snapshot) in
print(snapshot.value)
})
我想通过使用密钥获取uid。因此,我将这样查询:
userIndexes
-- 1: uid1
-- 2: uid2
-- 3: uid3
DataService.sharedInstance.DB_REF_USERS_INDEXED_BY_ID.queryOrderedByKey().queryStarting(atValue: "2").queryLimited(toFirst: 1).observeSingleEvent(of: .value, with: { (snapshot) in
print(snapshot.value)
})
当我使用2
或3
作为起点时,我得到了这个打印(这里是2
):
可选({
2=uid2;})
我可以很容易地将其转换为字典
但当我使用1
作为起点时,我得到了以下结果:
可选((nil
这是为什么?我在..中问了同样的问题
在分布式系统中,应该避免使用数组(特别是数字、顺序ID)
有关Firebase中如何处理类似数组的行为以及为什么应该避免使用数组的更多信息:
它在旧的firebase文档中明确定义了在firebase中使用数组时会发生什么。检查
你也可以通过。。上面写着
如果所有键都是整数,并且对象中0和最大键之间的键有一半以上具有非空值,则Firebase将将其渲染为数组
啊,我想我明白了。问题是,在这种情况下,我不会将它们视为数组键。例如,它可能如下所示:
--1:uid1--45:uid45
每个用户都有自己的密钥,可以在其中添加或删除。所以我可以通过将密钥重命名为类似于key45
,来解决这个问题,对吗?是的,对。。。始终使用一些字符串作为键,而不是Int,因为顺序方式键经常转换为数组,因为firebase相信它的自动递增。。。