Firebase查询示例返回无用的对象

时间:2019-02-09 13:36:02

标签: javascript firebase google-cloud-firestore

我正在尝试使用查询从Firebase文档中获取示例,但它似乎不起作用。我正在使用Cloud Firestore。

这是我得到的结果:query result

var citiesRef = db.collection("cities");

citiesRef.doc("SF").set({
    name: "San Francisco", state: "CA", country: "USA",
    capital: false, population: 860000,
    regions: ["west_coast", "norcal"] });
citiesRef.doc("LA").set({
    name: "Los Angeles", state: "CA", country: "USA",
    capital: false, population: 3900000,
    regions: ["west_coast", "socal"] });
citiesRef.doc("DC").set({
    name: "Washington, D.C.", state: null, country: "USA",
    capital: true, population: 680000,
    regions: ["east_coast"] });
citiesRef.doc("TOK").set({
    name: "Tokyo", state: null, country: "Japan",
    capital: true, population: 9000000,
    regions: ["kanto", "honshu"] });
citiesRef.doc("BJ").set({
    name: "Beijing", state: null, country: "China",
    capital: true, population: 21500000,
    regions: ["jingjinji", "hebei"] });


// Create a reference to the cities collection
var citiesRef = db.collection("cities");

// Create a query against the collection.
var query = citiesRef.where("state", "==", "CA");

console.log(query);

我希望记录一个表示包含指定值的文档的对象。但是,即使我搜索不存在的值,结果也总是相同的(请参见附件)。 这是为什么?我希望有人能解释这里发生了什么以及为什么文档中提供的示例不起作用...

1 个答案:

答案 0 :(得分:1)

这是因为,使用问题中的代码,您可以定义(和console.log())一个Query对象。

实际上,您不应该直接使用此对象,而是:

  • 调用get()方法以执行查询并获取结果文档(通过QuerySnapshot);
  • 使用onSnapshot()方法为QuerySnapshot事件附加侦听器

  • 或者,使用where()orderBy()等其他方法优化此查询...

您将在此处找到完整的文档:https://firebase.google.com/docs/reference/js/firebase.firestore.Query

因此,更具体地说,在当前代码中,您应该执行以下操作:

var query = citiesRef.where("state", "==", "CA");

query.get()
  .then(snapshot => {
    if (!snapshot.empty) {
        snapshot.forEach(doc => {
          console.log(doc.id, '=>', doc.data());
        });
    } else {
        console.log('No document corresponding to the query');
    } 
  })
  .catch(err => {
     console.log('Error getting documents', err);
  });