我有一个如下的JSON结构:
{
"groups" : {
"-KAv867tzVgIghmr15CM" : {
"author" : "ruben",
"name" : "Item A"
},
"-KAv87nqLEG1Jtc04Ebn" : {
"author" : "ruben",
"name" : "Item B"
},
"-KAv88yZe8KTfkjAE7In" : {
"author" : "ruben",
"name" : "Item C"
}
},
"users" : {
"rsenov : {
"avatar" : "guest",
"email" : "ruben@ruben.com",
"groups" : {
"-KAv867tzVgIghmr15CM" : "true",
"-KAv87nqLEG1Jtc04Ebn" : "true",
"-KAv88yZe8KTfkjAE7In" : "true"
}
}
}
}
每个用户都有一个带有childByAutoId()键的元素“组”。然后,我有该应用程序中存在的所有组的列表。
每次运行该应用程序时,我都会获取当前用户登录的URL参考,并获取该用户的组列表(在这种情况下,登录的用户是具有3个组的“
rsenov”)。对于该用户所属的每个组,我都会遍历组url参考,以查找该3个组的信息。
我这样做是这样的:
func loadTable() {
self.groups = []
var counter = 0
self.meses = []
var tempItems = [String]()
DataService.dataService.CURRENT_USER_GROUPS_REF.observeEventType(.Value, withBlock: { snapshot in
if let snapshots = snapshot.children.allObjects as? [FDataSnapshot] {
tempItems = []
for snap in snapshots {
DataService.dataService.GROUPS_REF.childByAppendingPath(snap.key).queryOrderedByChild("name").observeEventType(.Value, withBlock: { snapshot in
if let postDictionary = snapshot.value as? Dictionary<String, AnyObject> {
tempItems.append(snapshot.value.objectForKey("name") as! String)
let key = snapshot.key
let group = Group(key: key, dictionary: postDictionary)
self.groups.insert(group, atIndex: 0)
}
counter++
if (counter == snapshots.count) {
self.meses = tempItems
self.miTabla.reloadData()
}
})
}
}
})
}
我认为以这种方式进行迭代不是一个好主意。例如,如果GROUPS_REF网址中的某些子项发生更改,则该代码仅在该嵌套代码中运行,并且由于它没有从for循环中获取的“
snap.key”值,因此该代码不起作用。
在这种情况下,哪种方法是进行良好查询的最佳方法?
ew,这花了一些时间写。主要是因为我不太喜欢iOS / Swift:
let ref = Firebase(url: "https://stackoverflow.firebaseio.com/35514497")
let CURRENT_USER_GROUPS_REF = ref.childByAppendingPath("users/rsenov/groups")
let GROUPS_REF = ref.childByAppendingPath("groups")
var counter: UInt = 0
var groupNames = [String]()
CURRENT_USER_GROUPS_REF.observeEventType(.Value, withBlock: { groupKeys in
for groupKey in groupKeys.children {
print("Loading group \(groupKey.key)")
GROUPS_REF.childByAppendingPath(groupKey.key).observeSingleEventOfType(.Value, withBlock: { snapshot in
print(snapshot.value)
if (snapshot.childSnapshotForPath("name").exists()) {
groupNames.append(snapshot.value.objectForKey("name") as! String)
}
counter++
if (counter == groupKeys.childrenCount) {
print(groupNames)
}
})
}
})
顺便说一句,这就是您创建最小的,完整的可验证示例的方式。该代码没有外部依赖性(例如Group
和DataService
在您的代码中),仅包含与答案有关的内容。
重要的位:
observeSingleEventOfType
获得每个组,因为如果组发生更改,我不想获得更多的回调snapshot.childSnapshotForPath("name").exists()
经常检查您的小组是否有名字。您可能想要确保它们都具有名称,或者将它们与真实应用程序中的其他属性一起添加到列表中。在firebase中给定下面的数据结构,我想运行一个查询来检索博客'EFG'。我现在不知道用户id。
问题内容: 我想使用ES进行图书搜索。因此,我决定将作者姓名和标题(作为嵌套文档)放入索引,如下所示: 我不明白的是:如何构造搜索查询,以便在搜索“一二”时仅找到第二本书,而在搜索“二三”时什么也找不到,而在搜索“一”时所有图书呢? 问题答案: 也许是这样的? 该查询基本上说一个文件必须有and 。您可以轻松地重新配置该查询。例如,如果您只想搜索作者,请删除嵌套部分。如果您想要另一本书,请更改嵌套
问题内容: 我在获取与Elasticsearch一起使用的嵌套查询时遇到问题(如果我删除了查询字符串之一,则可以使用)。我要解决的问题是我有一个包含关闭列表的文档(关闭)。我想在条件满足另一个值的闭包列表中搜索一个值。那只是从argan = 1的闭包中获得价值 我正在得到这个错误响应; 我的映射如下所示。 有人知道我在做什么错吗? 问题答案: 您的查询不是有效的查询。您需要使用适当的复合查询将其他
我正在使用Xcode在swift中制作一个应用程序,并且我在某些按钮的动画方面遇到了问题。这是我的情况: 我在屏幕中间有三个按钮,在那里我还添加了一些限制。 我需要的是,当点击按钮时,它会到达屏幕的顶部,如第二张带有动画的照片: 我试过这个: 但发生的情况是按钮从屏幕底部出现向上滑动到第一张照片的位置。它不尊重我在动画中写的位置。这可能是由于约束吗?因为我将其垂直和水平居中。 你能帮我把它弄好吗?
太长别读:@Depth(value=-1)抛出空指针,忽略1以上的其他值 在我的Spring Boot with Neo4j项目中,我有3个简单的实体与关系: 我创建了一个简单的图,如下所示: 使用以下存储库: 以及以下代码: 要检索与上图所示相同的图表(取自实际的neo4j仪表板),我执行,其中包含,然后打印保存的度量和检索的度量: 无论深度的值如何,我都无法获取包含所有子节点的Metric节点
我有一个关于查询的问题,我实际上是在尝试膨胀视图,其中添加为朋友的人可以添加到回收器视图。 错误是: 原因:com。fasterxml。杰克逊。数据绑定。exc.UnrecognizedPropertyException:无法识别的字段“sahaj9917730102@gmail“(class.com.rana.sahaj.myyu.FriendsData),未标记为可忽略(5个已知属性:,”st