过滤子节点查询AngularFire2 Firebase



我在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

最新更新