Mon*_*ana 9 android firebase firebase-realtime-database
我能够使用orderByChild
和获取子项中特定值的数据equalTo
(很酷,它也适用于嵌套子项)
private void getData() {
try {
final DatabaseReference database = FirebaseDatabase.getInstance().getReference();
database.child(Constants.TABLE_TASKS).orderByChild("user/id")
.equalTo("somevalue")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Timber.d(dataSnapshot.toString());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法来获取未找到特定值的数据,基本上类似于notEqualTo("somevalue")
?
Fra*_*len 16
在Firebase查询模型中,您无法过滤值的不等式.
但是你可以测试没有任何价值(主要是:没有财产).例如,使用此数据模型:
{
child1: {
"user": {
"id": 1,
"name": "puf"
}
},
child2: {
"user": {
"id": 2,
"name": "abe"
}
},
child3: {
"user": {
"id": 3
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以查询没有user/name
属性的孩子:
ref.orderByChild('child/name').equalTo(null)
Run Code Online (Sandbox Code Playgroud)
这导致唯一没有名字的孩子:
child3
随意玩我的jsbin,看看你是否进一步:http://jsbin.com/liyibo/edit?js,console
更新:我之前知道我已经回答了这个问题,但是之前找不到它.这是欺骗:是否可能查询数据不符合指定的条件?.看起来我在那里有一个错误,因为显然我正在测试上面代码中是否缺少属性.
Mon*_*ana 12
我想我找到了解决方案,这更多的是如何设计数据库,实际上现在我理解Firebase指南背后的意图
https://firebase.google.com/docs/database/android/structure-data
原创设计:
{
child1: {
"user": {
"id": "id1",
"name": "puf"
}
},
child2: {
"user": {
"id": "id2",
"name": "abe"
}
},
child3: {
"user": {
"id": "id1"
"name": "puf"
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新设计:
因此除了存储用户的id和名称之外,我们还应该存储一个id本身作为键的节点并将其标记为true
{
child1: {
"user": {
"id": "id1",
"name": "puf"
"id1": true
}
},
child2: {
"user": {
"id": "id2",
"name": "abe"
"id2": true
}
},
child3: {
"user": {
"id": "id1"
"name": "puf"
"id1": true
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用更新的设计,如果我执行 ref.orderByChild('user/id1').equalTo(true)
我会输出Child1和Child 3
如果我执行ref.orderByChild('user/id1').equalTo(null)
,
我会得到Child2作为输出
归档时间: |
|
查看次数: |
11042 次 |
最近记录: |