如何在Firebase的Cloud Firestore中执行查询

时间:2017-10-09 09:50:52

标签: firebase nosql google-cloud-firestore

我按照文档here查看了如何编写查询,但我没有从中获取任何数据。数据库已经填充了doc

提供的示例

以下是我的代码

var db = firebase.firestore();

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

query.get().then(function(doc) {
if (doc.exists) {
    console.log("Document data:", doc.data());
} else {
    console.log("No such document!");
}
}).catch(function(error) {
    console.log("Error getting document:", error);
});

如果我没有对它提出任何疑问,它的工作正常。例如(也来自doc):

var docRef = db.collection("cities").doc("SF");

docRef.get().then(function(doc) {
    if (doc.exists) {
        console.log("Document data:", doc.data());
    } else {
        console.log("No such document!");
    }
}).catch(function(error) {
    console.log("Error getting document:", error);
});

1 个答案:

答案 0 :(得分:9)

您的两个请求之间的区别在于,在第二种情况下,您要检索一个文档,该文档会为您提供DocumentSnapshot属性existsdata()方法。

在您的不工作示例中,您执行了一项查询,该查询为您提供的QuerySnapshot必须与DocumentSnapshot区别对待。您可以获得文档列表/集合,而不是单个文档。您可以使用emptysize属性检查是否已检索到数据,然后使用forEach方法或通过docs数组查看结果:

var db = firebase.firestore();

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

query.get().then(function(results) {
  if(results.empty) {
    console.log("No documents found!");   
  } else {
    // go through all results
    results.forEach(function (doc) {
      console.log("Document data:", doc.data());
    });

    // or if you only want the first result you can also do something like this:
    console.log("Document data:", results.docs[0].data());
  }
}).catch(function(error) {
    console.log("Error getting documents:", error);
});