对于Firebase,我仍然很新,但仍然在学习如何使用它进行“简单”操作。我有一个看起来像这样的结构:包含具有特定值的子对象的节点
"users": {
"-KY5FJBudXmKv07noYbZ": {
"emailAddress" : "[email protected]",
"tags": {
"red": "8dfhj34sd983ie",
"green": "9f5d6g8er2d"
}
},
"-KY5JM-NGjNgUXwrBRhs": {
"emailAddress": "[email protected]",
"tags": {
"blue": "58ewgsg656fd",
"pink": "sdf6g3dg5e6d"
}
},
"-K_0c7wslBiOceF30R-5": {
"emailAddress": "[email protected]",
"tags": {
"blue": "58ewgsg656fd",
"brown": "xx4f5g68d5d1",
"black": "8941gs8536sdf1"
}
},
}
我想要做的就是内users
包含在孩子获取节点的tags
其中该值是58ewgsg656fd
。
在这个例子中,这将是"blue": "58ewgsg656fd"
孩子和包含它们的users
节点是最后两个(...0R-5
和...BRhs
)一个在该结构中。
这是我到目前为止有:
DatabaseReference usersRef = database.getReference("users");
usersRef.orderByChild("tags").[NOT SURE WHAT GOES HERE].addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getChildrenCount() == 0) {
// No users found with that tag
} else {
// Users found with that tag
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Error occurred
}
});
我应该写什么代码来获取这些节点?
你应该尝试颠倒标签的键值对的顺序。那么它会更容易 –
所以说我做到了这一点,我将如何去“关键”而不是“价值”查询? – Brian
即使您反转键和值(或者添加具有反转键/值的其他子节点),这仍然是一个困难的查询,因为您需要为所有值定义索引。在这种情况下,最好添加从值到路径的顶级查找列表映射。在这里看到我的答案:http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value –