假设我在“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. 如何从android中的firebase获取孩子的价值?
- 6. Firebase规则来访问特定的孩子的价值
- 7. Firebase,根据孩子的价值找到父母的关键
- 8. 如何从Firebase中检索所有孩子的价值?
- 9. 取决于孩子的价值,以其他孩子的价值在火炉堡
- 10. Firebase:如何使用更改了表格的孩子?
- 11. C#很多家长形成了一个孩子
- 12. 谓词总结孩子的价值
- 13. jQuery元素动画的孩子价值?
- 14. 从父代得到孩子的价值
- 15. Rails的为最新的孩子和搜索由它的价值
- 16. 有很多值的更新列
- 17. 更新多个imageview的具体价值
- 18. Firebase:在不知道密钥的情况下获取孩子的价值
- 19. 有孩子具有一定价值
- 20. LINQ to Entities:总结孩子价值
- 21. Nhibernate不更新孩子
- 22. 循环创建了太多的孩子
- 23. 更新Firebase中的值
- 24. 价值未更新
- 25. 如何总结Linq中的扩展孩子的孩子的价值观
- 26. Firebase获取子女孩的子女
- 27. 从firebase删除孩子
- 28. iPhone - 更改子子子的NSMutableDictionary价值
- 29. 更新的JLabel与价值
- 30. 获取更多的价值
你的结构你不能这样做。 –
是否要将用户名从“userA”更改为另一个用户名? – faruk
谢谢@ J.Doe您可以为此提供示例结构吗? – LIPONEF