2016-11-11 46 views
1

我想要SELECT * FROM products WHERE 'birthday' = true; 但是,我可以对Firebase数据库执行相同的操作吗?Android Firebase数据库查询选择条件

我已经试过

DatabaseReference ref = FirebaseDatabase.getInstance().getReference(); 
ref. child("products").orderByChild("birthday").equalTo(true).addChildEventListener ........ 

Firebase Database image

但它并不work.Please帮助。如果我的数据结构不好,请告知如何创建更好的结构。

回答

2

数据库的屏幕截图显示birthday不是产品节点的直接子节点:还有一个额外的步骤,即for_purpose

您的查询必须遵循此模式,精确,因此更新您的查询代码:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference(); 
ref.child("products") 
    .orderByChild("for_purpose/birthday") 
    .equalTo(true) 
    .addChildEventListener ... 

请注意,这有效地工作,必须建立索引的每一个可能的for_purpose孩子在你的安全规则。或者至少对于你在查询中使用的那些。索引必须与您的查询完全匹配,仅在for_purpose上放置索引是不够的。

对于这个问题,你至少需要如下:

{ 
    "rules": { 
    "products": { 
     ".indexOn": [ 
     "for_purpose/birthday", 
     "for_purpose/anniversary", 
     "for_gender/male", 
     ... 
     ] 
    } 
    } 
} 
+0

嗨vzsg,你能告诉我如何设置安全规则?它是否正确? { “规则”:{ “.read ”: “AUTH = NULL”, “ .WRITE ”: “AUTH = NULL”, “产品”:{ “ .indexOn ”:“ for_purpose” ,“for_gender”] } } } –

+0

嗨vzsg,你能告诉如何设置安全规则吗?它是否正确? { “规则”:{ “.read ”: “AUTH = NULL”, “ .WRITE ”: “AUTH = NULL”, “产品”:{ “ .indexOn ”:“ for_purpose” ,“for_gender”] } } } –

+0

我使用示例规则编辑答案。 – vzsg