假设我在“post”中有10000个孩子,每个节点都包含孩子的“用户名”。如果“userA”在10000个数据中添加6000。我怎么能在每个节点更新“用户A”的“后”Firebase更新了很多孩子的价值
回答
火力地堡如果NOSQL模式,你不能把它应用直接查询。您需要对所有节点应用迭代,并在用户名为“userA”时更新。
Thanks @Usman您能否举一些例子来说明目的? – LIPONEF
@LIPONEF示例代码在下面的一些答案中发布,您可以根据自己的需要修改它们。 –
您需要知道所有用户帖子。
你需要这样的结构:
root
|
+-- posts
| |
| +-- $postId
| |
| +-- text: $text
| |
| +-- username: $username
|
+-- userPosts
| |
| +-- $userId
| |
| +-- $postId: true
采用这种结构可以检索的所有帖子的ID为用户和更新帖子。
谢谢皮皮克斯,如果我把UID而不是用户名。当我查询每个帖子时,我得到的UID从另一个节点查询用户名(例如root-> users-> uid-> username =“userA”)。比较你的给定结构哪一个更好,因为有人告诉我,我给出的例子可能会浪费你的Firebase流量成本。 – LIPONEF
你不必改变你的帖子结构只是添加userPosts或做像'postsRef.orderByChild(“用户名”)。equalsTo(“userA”)'像'在@jorge回答 – Pipiks
@Pipiks在请求数据,你应该把userId也..我叫它在nosql中的定向关系 – faruk
如果你想从helloA更改文本你好我是一个,例如,代码是这样的:
DatabaseReference postReference = FirebaseDatabase.getInstance().getReference("posts");
postReference.orderByChild("username").equalsTo("userA")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
for (DataSnapshot data : dataSnapshot.getChildren()) {
data.getRef().child("text").setValue("hello I'm A");
所以,你有一个dataSnapshot与每一个岗位与用户名等于用户A你可以迭代它并更改这些帖子
问题是关于更新字段用户名。 我的建议是为更新值创建临时哈希映射。所以它只会更新所有帖子一次。
诀窍是,更新节点的孩子时,你可以把“the_key”用斜杠“/”加上你要更新,在这种情况下,该领域“用户名”
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"]
},
- 1. Firebase更新孩子的价值观正在消除子女
- 2. 有价值的孩子的Firebase查询
- 3. Firebase更新多个孩子错误
- 4. Firebase,不能增加孩子的价值
- 5. 更新CoreData增加了很多零值
- 6. 更新Firebase中的子值
- 7. Firebase JSON:需要访问孩子,但每个孩子都有更多的孩子
- 8. Firebase,根据孩子的价值找到父母的关键
- 9. Firebase规则来访问特定的孩子的价值
- 10. 如何从android中的firebase获取孩子的价值?
- 11. 如何从Firebase中检索所有孩子的价值?
- 12. 访问孩子价值jquery
- 13. 取决于孩子的价值,以其他孩子的价值在火炉堡
- 14. Firebase:如何使用更改了表格的孩子?
- 15. Firebase,只得到新的孩子
- 16. Hibernate的一个一对多:在更新,改变了孩子不更新
- 17. 使用Swift更新Firebase中的子值
- 18. 有很多孩子的jquery选择
- 19. XPATH - 有很多孩子的html
- 20. android性能:很多观点vs有很多孩子的viewgroup
- 21. C#很多家长形成了一个孩子
- 22. Firebase - 如何更新许多孩子,而不是删除AngularFire中的其他人
- 23. 从父代得到孩子的价值
- 24. jQuery元素动画的孩子价值?
- 25. 谓词总结孩子的价值
- 26. Rails的为最新的孩子和搜索由它的价值
- 27. 更新孩子的状态
- 28. 有很多值的更新列
- 29. 更新价值
- 30. 更新价值
你的结构你不能这样做。 –
是否要将用户名从“userA”更改为另一个用户名? – faruk
谢谢@ J.Doe您可以为此提供示例结构吗? – LIPONEF