我的Firebase数据库包含具有以下格式的对象:
"documentation": {
"scotch": {
"URL": "https://scotch.io",
"description": "Fun and practical web development",
"level": 0,
"name": "Scotch",
"tech": ["angular", "angularjs", "react", "laravel", "java"],
"type": "web"
},
...
}
我希望使用tech
属性检索所述对象的列表
例如,我想查询包含技术documentation
的每个angular
;可以实现吗?
到目前为止,我过滤文档的唯一方法是查询所有文档:
dbRef = this.firebase.database().ref().child('documentation');
this.dbRef.on('value', snap => {
documentation = snap.val();
}
并将其过滤到客户端,如果我的问题得到解答,这将是不必要的。
谢谢!
更新:
我可以按type
,level
,description
(每个具有一个值的键)进行查询,但似乎无法通过{{查询1}}因为它是一个字符串数组。
我是这样做的:
tech
答案 0 :(得分:0)
您需要创建" tech"的索引。从中查询。这将需要维护额外的数据结构,但查询将很简单。
{
"documentation": {
"scotch": {
"URL": "https://scotch.io",
"description": "Fun and practical web development",
"level": 0,
"name": "Scotch",
"tech": ["angular", "angularjs", "react", "laravel", "java"],
"type": "web"
}
},
"tech": {
"angular": {
"scotch": {
... demnormalized value
}
},
"angularjs": {
"scotch": {
... demnormalized value
}
},
"react": {
"scotch": {
... demnormalized value
}
}
}
}
通过这种方式,您可以轻松查询:
const createTechRef = (tech) => {
return firebase.database().ref('tech').child(tech);
};
const angularRef = createTechRef('angular');
angularRef.on('value', snap => {
// all angular "techs"
});