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不一样
要在给定集合中查找特定文档,您有两种解决方案:
- 你知道它的 ID,这不是你的情况;
- 您可以构建一个 query 来唯一标识文档。例如,在您的情况下,基于字段
userId
或 medId
或任何其他字段或多个字段的组合。
根据您在问题中共享的信息,我们无法定义您应该运行 找到所需文档的查询。如果您在问题中添加更多详细信息,可能会更准确地回答。
根据您的评论更新
首先需要通过查询得到文档,然后得到它的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(...);
您的函数中没有可用的文档 ID,一旦您检索数据并将其传递给函数,就无法知道它,除非保留 documentID
。或者您必须通过过滤字段的唯一组合(即 userId
和 medID
)再次查询文档。
最简单的选择是在创建时在医学下的每个文档中包含文档 ID。因此,您可以直接在 onPressed
函数下按 ID 更新文档,前提是您可以访问该函数中的文档。
如果您决定这样做,您可以在创建时包含文档 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
时,您始终可以在每个文档中找到方便的文档 ID。您只需将 docID 放在 **????????**
.
的位置即可直接更新它
我开发了一个应用程序来提醒老年人他们的服药时间,并且知道我想让他们更新他们的药物并存储他们所做的任何更改。 这是我更新药物名称的代码:
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不一样
要在给定集合中查找特定文档,您有两种解决方案:
- 你知道它的 ID,这不是你的情况;
- 您可以构建一个 query 来唯一标识文档。例如,在您的情况下,基于字段
userId
或medId
或任何其他字段或多个字段的组合。
根据您在问题中共享的信息,我们无法定义您应该运行 找到所需文档的查询。如果您在问题中添加更多详细信息,可能会更准确地回答。
根据您的评论更新
首先需要通过查询得到文档,然后得到它的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(...);
您的函数中没有可用的文档 ID,一旦您检索数据并将其传递给函数,就无法知道它,除非保留 documentID
。或者您必须通过过滤字段的唯一组合(即 userId
和 medID
)再次查询文档。
最简单的选择是在创建时在医学下的每个文档中包含文档 ID。因此,您可以直接在 onPressed
函数下按 ID 更新文档,前提是您可以访问该函数中的文档。
如果您决定这样做,您可以在创建时包含文档 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
时,您始终可以在每个文档中找到方便的文档 ID。您只需将 docID 放在 **????????**
.