我的Firebase数据库
应用程序中的表格结构如下alleTouren = alleTouren.sorted(by: { $0.compare($1, options:.numeric) == .orderedAscending} )
存储数据如下:
"storePurchase":{
"$user_id":{
".read": "$user_id===auth.uid",
".write":"$user_id===auth.uid",
"$storeId":{
".validate":"root.child('stores/'+auth.uid+'/'+$storeId).exists()",
"$pId":{
"cId":{
".validate":"root.child('customers/'+auth.uid+'/'+newData.val()).exists()",
},
"amount":{
},
"rate":{
},
}
}
}
},
我有{
"-KeyN0kMSGZbb9hb9lNm" : {
"-Kf2_5kJoLctmlGcR4d1" : {
"amount" : "2500",
"cid" : "-KdChbdoV7nxwZoGLWsY", //cust1
"rate" : "5"
},
"-Kf2_e05toGelnjRMbfg" : {
"amount" : "10000",
"cid" : "-KdCggxld52mq0DsGRjH", //cust2
"rate" : "0.5"
},
"-Kf2auWq_hQtTErp55SY" : {
"amount" : "5869",
"cid" : "-KdChbdoV7nxwZoGLWsY", //cust1
"rate" : "58"
},
"-Kf2b1QoF4I7LAVAL0_4" : {
"amount" : "25000",
"cid" : "-KdChbdoV7nxwZoGLWsY", //cust1
"rate" : "0.8"
},
"-Kf2bEwN5PtwGUec_UFh" : {
"amount" : "2500",
"cid" : "-KdCggxld52mq0DsGRjH", //cust2
"rate" : "0.8"
},
"-Kf2b_tZo3rVJbegZNXa" : {
"amount" : "5000",
"cid" : "-KdCgJKh6_Rb8MOi-fIj", //cust3
"rate" : "1.5"
}
}
}
即客户ID,现在我希望将每个客户的这些数据合并,并将其作为唯一值存储在单独的表中。我怎么能结合这些数据?我尝试过使用for循环并尝试将这些值存储在cId
到一个单独的列表中,但是无法成功?我还能如何根据addValueEventListener
合并这些数据并总结cId
?
修改
我试图实现以下数据结构。
amount
答案 0 :(得分:1)
每次购买时都要运行此交易,这样可以使您的理货簿按照您希望的方式更新。因此,每次将购买推送到Firebase时都要运行此事务。
dbRef.child("tallyBook/"+FirebaseAuth.getInstance().getCurrentUser().getUid()+"/"+storeId+"/"+purchase1.cid).runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
TallyBook tally = mutableData.getValue(TallyBook.class);
if (tally == null) {
tally = new TallyBook();
tally.totalRate = purchase1.rate;
tally.totalAmount = purchase1.amount;
} else {
tally.totalRate = String.valueOf(Double.parseDouble(tally.totalRate) + Double.parseDouble(purchase1.rate));
tally.totalAmount = String.valueOf(Double.parseDouble(tally.totalAmount) + Double.parseDouble(purchase1.amount));
}
mutableData.setValue(tally);
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {}
});
}
购买
public class Purchase {
public String rate;
public String cid;
public String amount;
public Purchase() {
}
}
和TallyBook
public class TallyBook {
public String totalRate;
public String totalAmount;
public TallyBook() {
}
}
然后,您可以使用以下查询来获取特定用户和商店的理货簿。
dbRef.child("tallyBook/"+FirebaseAuth.getInstance().getCurrentUser().getUid()+"/"+storeId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot tally : dataSnapshot.getChildren()) {
// I called this TallyBook but it's more like one entry in a tallybook
TallyBook tally = tally.getValue(TallyBook.class);
// Do something with tally, display it or whatever
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});