繁体   English   中英

Cloud Firestore 查询以获取文档 ID,Flutter

[英]Cloud Firestore query to get doc ID, Flutter

我开发了一个应用程序来提醒老年人他们的用药时间,并且知道我想让他们能够更新他们的药物并存储他们所做的任何更改。 这是我更新药物名称的代码:

onPreesed: () async {
        final updatedMedcName1 = await FirebaseFirestore.instance
            .collection('medicine')
            .doc(**????????**)
            .update({'medicationName': updatedMedcName});
        // Navigator.of(context).pop();
      },

但我不知道如何获取文档 ID,如下所示:(红色下划线) 在此处输入图像描述

对于字段medId我使用代码获得了 id:

FirebaseFirestore.instance.collection('medicine').doc().id,

但它与红色下划线的 id 不同

为了在给定集合中查找特定文档,您有两种解决方案:

  1. 你知道它的 ID,这不是你的情况;
  2. 您可以构建一个唯一标识文档的查询 例如,在您的情况下,基于字段userIdmedId或任何其他字段或多个字段的组合。

使用您问题中共享的信息,我们无法定义您应该运行哪个查询来查找所需的文档。 如果您在问题中添加更多详细信息,则可能会更准确地回答。

根据您的评论更新

您首先需要通过查询获取文档,然后获取其DocumentReference ,然后对其进行更新,如下所示:

QuerySnapshot querySnap = await FirebaseFirestore.instance.collection('medicine').where('userId', isEqualTo: user.uid).get();
QueryDocumentSnapshot doc = querySnap.docs[0];  // Assumption: the query returns only one document, THE doc you are looking for.
DocumentReference docRef = doc.reference;
await docRef.update(...);

您的 function 中没有可用的文档 ID,一旦您检索数据并将其传递给 function,如果不保留documentID ID,就无法知道它。 或者您必须通过过滤字段的唯一组合(即userIdmedID )再次查询文档。

最简单的选择是在创建时将文档 ID 包含在医学下的每个文档中。 因此,您可以直接在onPressed function 下按 ID 更新文档,因为您可以访问该 function 中的文档。

如果您决定这样做,您可以在创建时包含文档 ID,如下所示:

// get a new reference for a document in the medicine collection
final ref = FirebaseFirestore.instance.collection('medicine').doc();

// upload the data and include docID in it
await ref.set({
    'docID': ref.id,
    'medID': medID, 
    // rest of the data    
  });

这样,当您检索medicines时,您始终可以在每个文档中方便地使用 documentID。 您只需将 docID 放置在**????????**的位置即可直接更新它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM