我在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,
}
});
}
如何获得此列表?返回空。
您只能查询一个字段;
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);
});
});
鉴于您的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-quary-come-lasion-men-multiple-where-where-where-clauses-clauses-in-firebase