Yun*_*Han 15 android firebase firebase-realtime-database
我有以下Firebase数据库结构.uIds是一种类型List<String>.我正在尝试uIds使用递增的索引添加另一个uId .setValue()并updateChildren()要求我检索现有数据,push()并将添加一个项目,其中随机生成的字符串作为键而不是递增的索引.是否有一种更简单的方法不需要检索现有数据?谢谢!
"requests" : {
"request001" : {
"interests" : [ "x" ],
"live" : true,
"uIds" : [ "user1" ] // <---- from this
},
"request002" : {
"interests" : [ "y" ],
"live" : true,
"uIds" : [ "user2" ]
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
对不起,对不起.让我详细说明一下.假设我有上述数据库,并希望将其更新为以下内容.
"requests" : {
"-KSVYZwUQPfyosiyRVdr" : {
"interests" : [ "x" ],
"live" : true,
"uIds" : [ "user1", "user2" ] // <--- to this
},
"-KSl1L60g0tW5voyv0VU" : {
"interests" : [ "y" ],
"live" : true,
"uIds" : [ "user2" ]
}
}
Run Code Online (Sandbox Code Playgroud)
ishmaelMakitla的建议,mDatabase.child("requests").child("request001").setValue(newRequest)将用"newRequest"覆盖"request001".所以我应该检索"request001"的现有数据并将"user2"添加到列表中uIds.它将是这样的:
mDatabase.child("requests").child("request001").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Request newRequest = dataSnapshot.getValue(Request.class);
newRequest.uIds.add("user2");
mDatabase.child("requests").child("request001").setValue(newRequest);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
Run Code Online (Sandbox Code Playgroud)
但我想知道这个过程是否必要,因为我想要做的只是将一个项目添加到列表中uIds.
Fra*_*len 17
有关创建可扩展数据的Firebase文档建议您使用不同的数据结构:
"requests" : {
"-KSVYZwUQPfyosiyRVdr" : {
"interests" : { "x": true },
"live" : true,
"uIds" : {
"user1": true,
"user2": true
}
},
"-KSl1L60g0tW5voyv0VU" : {
"interests" : { "y": true },
"live" : true,
"uIds" : {
"user2": true
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下是此数据结构更好地工作的一些原因:
ref.child("uUids").child("user3").setValue(true)我已经开始重新迭代到自己:每当你发现自己在做的时候array.contains("xyz"),你应该使用一个集合而不是一个数组.上面的映射"key": true是Firebase上的一个集合的实现.
有些人可能会认为数组是一种更有效的存储数据的方式,但对于Firebase而言并非如此:
你看到什么了:
"uIds" : [ "user1", "user2" ]
Run Code Online (Sandbox Code Playgroud)
Firebase存储的内容:
"uIds" : {
"0": "user1",
"1": "user2"
}
Run Code Online (Sandbox Code Playgroud)
所以存储一组几乎是一样的:
"uIds" : {
"user1": true,
"user2": true
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15983 次 |
| 最近记录: |