Angular Firestore 通过查询获取单个文档

Efa*_* Du 2 angularfire angularfire2 angular google-cloud-firestore

我正在使用 Google Firestore。有一个名为 Universities 的集合,其中每个文档代表一所大学。

如何按名称查找大学并将其 view_count 更新为 +1?

[Collection: Universities]:
  [Document: 0JsaLtcfdDaEtHLMlMrh]:{
                      name: The University of Sydney,
                      view_count: 1
            };
   [Document: K2z7DMhKreyDniGUpo2t]:{
                      name: University of New South Wales,
                      view_count: 2
            }
Run Code Online (Sandbox Code Playgroud)

Sha*_*anu 5

你可以这样做:

db.collection("Universities").where("name", "==", "The University of Sydney")
    .get()
    .then(function(querySnapshot) {
        querySnapshot.forEach(function(doc) {
            // doc.data() is never undefined for query doc snapshots
            //console.log(doc.id, " => ", doc.data());
            var docData = doc.data();
            var updatedCount = docData.view_count + 1;
            var universityRef = db.collection('Universities').doc(doc.id);
            var setWithMerge = universityRef.set({
                                    view_count: updatedCount
                                }, { merge: true });

        });
    })
    .catch(function(error) {
        console.log("Error getting documents: ", error);
    });
Run Code Online (Sandbox Code Playgroud)

因此,在这里您可以做的是首先在集合中查询使用where以获取具有特定名称的所有文档,然后在内部querySnapshot您将获得一个文档对象,然后您可以创建该文档的引用并view_count使用set方法更新(覆盖)其属性值merge: true保持其他属性值不变。

按照官方文档:添加数据获取数据

注意:这是通用的 Web JS 解决方案。您可以在 angular 应用程序中使用相同的逻辑并编写打字稿代码