java - 从 Firebase 数据库中检索跨对象子对象
问题描述
我正在尝试从 where 获取weight
和quantity
从Cat1
哪里获取item_name
,date
并且在 Firebase Realtime DB 中branch
是相同的。Cat2
但我不知道如何检查条件。
JSON
"Cat1" : {
"-LBBWypuYLVn-aDYWK-N" : {
"branch" : "b1",
"date" : "28/Apr/2018",
"weight" : "46",
"item_name" : "item1",
"quantity" : "20"
},
"-LBBZKUlEJB-HdiKftoj" : {
"branch" : "b2",
"date" : "28/Apr/2018",
"weight" : "112",
"item_name" : "item2",
"quantity" : "16"
}
},
"Cat2" : {
"-LBBWQcC3acYk-OOiX3T" : {
"branch" : "b1",
"date" : "28/Apr/2018",
"item_name" : "item1",
"weight" : "2.7",
"quantity" : "20"
}
}
到目前为止,我已经完成了以下工作:
mFishQuery = mFishRef.orderByChild("date").equalTo(mawStock.getDate());
// mFishQuery = mFishRef.orderByKey();//.equalTo(mawStock.getDate());
// Query fishWeight = mFishQuery.orderByChild("item_name").equalTo(mawStock.getItem_name()).getRef().orderByChild("quantity").equalTo(mawStock.getQuantity());
mFishQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mWeightF = (Double) dataSnapshot.child("fish_weight").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
mFishRef.child("date").equalTo(mawStock.getDate()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
解决方案
尝试以下操作:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Cat2");
ref.orderByChild("item_name").equalTo("item1").addSingleValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String date=datas.child("date").getValue().toString();
DatabaseReference refer=FirebaseDatabase.getInstance().getReference().child("Cat1");
refer.orderByChild("date").equalTo(date).addSingleValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//retrieve data
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
查询时,只能使用一个孩子,所以一个orderByChild()
或orderByKey()
所以,在这里你有孩子的数据快照,Cat2
然后你查询where item_name=item1
并date
从数据库中检索。
然后添加一个嵌套监听器并进行查询where date= date_retrieved
,并检索 Cat1 的数据。
推荐阅读
- java - docker compose with services 和 mongo 数据库抛出错误打开套接字
- python - 将复选框添加到 Canva Kivy
- node.js - Json 对象没有出现在浏览器上
- python - 从用户输入打印最小整数
- r - 将绘图转换为 ggplot 并添加水平线直到特定点
- neural-network - BatchNormalization 算作网络中的一层吗?
- javascript - 没有 JSON 或变量分配的 Javascript deepcopy
- javascript - 有没有办法在 p5.js 中正确分隔一串文本?
- c - 执行代码时出现分段错误(核心转储)错误
- c - 当我按下“q”键时,如何停止接受用户的输入?