我的firebase中有这个数据结构。
"produtos" : {
"3" : {
"data" : "2017-09-21",
"fornecedor" : {
"cnpj" : "123234534534",
"fantasia" : "Barreirinha"
},
"nNF" : 3,
"peso" : 3,
"precoCompra" : 6,
"vendido" : false
},
"123" : {
"data" : "2017-09-14",
"fornecedor" : {
"cnpj" : "123234534534",
"fantasia" : "Barreirinha"
},
"nNF" : 123,
"peso" : 23000,
"precoCompra" : 2.21,
"vendido" : false
}
}
我需要获取包含CNPJ
键的对象值列表。
我使用的是Angular,AngularFire2和TypeScript,但我无法理解。
retrieveProdutos(cnpjFornecedor: string) {
this.produtos = this.db.list(this.paths.pathProduto, {
query: {
orderByChild: 'cnpj',
equalTo: cnpjFornecedor,
orderByKey: true,
}
});
}
如何获取此列表?回来了。
答案 0 :(得分:0)
您只能查询一个字段;
query: {
orderByChild: "vendido",
equalTo: "false"
}
例如,将为您提供vendido
子键设置为false
的所有子节点。
此外,如果您想访问每个子值,您可以执行以下操作:
this.produtos.subscribe(produtos => {
produtos.forEach(produto => {
console.log("produto:", produto);
// And here you can access each produto data
});
});
或者,取决于您访问数据库:
yourRef.on("value", (snapshot) => {
snapshot.forEach((child) => {
var produto = child.val();
console.log("produto nNF", produto.nNF);
});
});
答案 1 :(得分:0)
鉴于您的JSON,您将通过已知路径上的嵌套属性进行过滤。这可以通过在查询中指定属性的路径来实现:
retrieveProdutos(cnpjFornecedor: string) {
this.produtos = this.db.list(this.paths.pathProduto, {
query: {
orderByChild: 'fornecedor/cnpj',
equalTo: cnpjFornecedor
}
});
}
更新:在第二次阅读时,您说您要返回值为nNF
的项目。在这种情况下,您可以使用以下内容进行过滤:
retrieveProdutos(cnpjFornecedor: string) {
this.produtos = this.db.list(this.paths.pathProduto, {
query: {
orderByChild: 'nNF',
startAt: 0
}
});
}
您需要注意的是,Firebase数据库查询只能对单个属性进行排序/过滤。在许多情况下,可以将要过滤的值组合到单个(合成)属性中。有关此方法和其他方法的示例,请参阅我的答案:http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase