答案 0 :(得分:2)
您需要了解所有用户帖子。
你需要这样的结构:
root
|
+-- posts
| |
| +-- $postId
| |
| +-- text: $text
| |
| +-- username: $username
|
+-- userPosts
| |
| +-- $userId
| |
| +-- $postId: true
使用此结构,您可以检索用户的所有帖子ID并更新帖子。
答案 1 :(得分:1)
Firebase如果是NOSQL架构,则无法对其进行直接查询。您需要在所有节点上应用迭代,并在用户名为" userA"
时更新答案 2 :(得分:0)
如果您想将文本从 helloA 更改为 hello我是,例如代码如下:
sonar.jdbc.maxActive=20
sonar.jdbc.maxIdle=5
所以你有一个dataSnapshot,每个帖子的用户名都等于userA,你可以迭代它并更改那些帖子
答案 3 :(得分:0)
问题是关于更新字段用户名。 我的建议是为更新值创建一个临时hashMap。所以它只会为所有帖子更新一次。
诀窍是,在更新节点的子节点时,您可以将带有斜杠“/”的“the_key”加上要更新的字段,在本例中为“username”
DatabaseReference postDbRef = FirebaseDatabase.getInstance().getReference("posts");
Map<String, Object> updateValues = new HashMap<String, Object>();
String oldUserName = "userA";
String newUserName = "userA new";
postDbRef.orderByChild("username")
.equalTo(oldUserName)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
updateValues.put(childSnapshot.getKey()+"/username", newUsername);
}
postDbRef.updateChildren(updateValues);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
;
为了提高性能,我建议在数据库规则中添加“.indexOn”。像这样:
"posts": {
".indexOn": ["username"]
},