【问题标题】:Firestore query single documentFirestore 查询单个文档
【发布时间】:2020-07-26 04:10:44
【问题描述】:

在 Flutter 应用中,仅当最后更新的字段大于本地最后更新的字段时,我才需要从 Firestore 中提取用户文档。

目前我是这样做的:

    QuerySnapshot usersData = await Firestore.instance
        .collection("users")
        .where("lastUpdated", isGreaterThan: lastUpdatedLocally)
        .where("userId", isEqualTo: userId)
        .getDocuments();
    Map<String, dynamic> userData =
        usersData.documents.isEmpty ? {} : usersData.documents.first.data;

我有三个问题:

  1. 是否可以在 get 查询单个文档中执行类似操作,知道文档 ID 是用户 ID 来查询整个集合似乎不正确。
  2. 如果没有,我们是否可以通过文档 ID 进行查询,例如:.where(&lt;documentId&gt;, isEqualTo: userId),而不是在文档中添加一个名为“userId”的文件。
  3. 最后,执行我在此处所做的操作是否比查询单个文档更慢(如果可能的话)。

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    如果您知道文档 ID,您当然可以使用 DocumentReference 而不是构建查询来 get() 单个文档。

    DocumentSnapshot snapshot = await Firestore.instance.collection("users").document(userId).get()
    

    性能差异可以忽略不计。 Firestore 查询全部基于检索到的文档总数,而不是集合中的文档数。像上面这样的文档 get() 本质上与您使用 FieldPath.documentId 作为字段名称对文档 ID 字段进行查询一样。

    如果您试图仅在某个字段匹配时获取文档,则必须使用FieldPath.documentId 进行完整查询。但是,即使是与任何文档都不匹配的查询,您仍然需要阅读。

    【讨论】:

      【解决方案2】:

      这样调用 Firestore 时可以指定文档 ID

      var document = await Firestore.instance.collection('COLLECTION_NAME').document('TESTID1');
      document.get() => then(function(document) {
        print(document("name"));
      });
      

      【讨论】:

        猜你喜欢
        • 2018-07-12
        • 2018-12-20
        • 2021-05-30
        • 1970-01-01
        • 2019-04-30
        • 1970-01-01
        • 2020-12-12
        • 2021-02-18
        相关资源
        最近更新 更多