FLUTTER FIRESTORE - 查询字段并获取文档 ID 并检查其他字段

Posted

技术标签:

【中文标题】FLUTTER FIRESTORE - 查询字段并获取文档 ID 并检查其他字段【英文标题】:FLUTTER FIRESTORE -Query the field and get document id and check other field 【发布时间】:2020-02-27 05:36:43 【问题描述】:

我正在尝试获取 Firestore 中文档字段中的搜索值(用户 ID)我想检查文档的其他字段(状态)我尝试了这种方法但失败了

handlesubmit(BuildContext context)async

final QuerySnapshot searcheduserid=
               await Firestore.instance.collection('users')
            .where('userid',isEqualTo: userid).limit(1).getDocuments();

final userdocid=searcheduserid.documents.map((doc)=>doc.documentID);

final DocumentSnapshot getuserdoc= await Firestore.instance.collection('users')
                      .document(userdocid).get();

final userstatus = getuserdoc.data['status'];
//  I GET AN ERROR HERE ERROR SAYS

// METHOD [](status) was called on null

    if(userstatus==null)
        return showdialog( context,'the entered user id status does not exist');
    

【问题讨论】:

【参考方案1】:

您可能复制了旧版本的代码,因为您的代码不太可能编译程序的以下行:

final DocumentSnapshot getuserdoc= await Firestore
    .instance
    .collection('users')
    .document(userdocid).get();

我系统上的错误信息是:

参数类型“Iterable<String>”不能分配给参数类型“String”。

这意味着userdocidIterable 类型的String (Iterable<String>),但需要一个String 类型的参数。

您有多种解决问题的方法,但我建议如下: 由于您只期待来自QuerySnapshot 的一个文档,因此只需查看第一个文档就足够了。

final QuerySnapshot searchedUserId = await Firestore.instance
    .collection('users')
    .where('userid', isEqualTo: userid)
    .limit(1)
    .getDocuments();
// if it is possible that searchedUserId returns no document make sure to 
// check whether searchedUserId.documents.length > 0, 
// otherwise searchedUserId.documents.first will throw an error
DocumentSnapshot document = searchedUserId.documents.first;
final userDocId = document.documentID;
final DocumentSnapshot getuserdoc =
    await Firestore.instance.collection('users').document(userDocId).get();

改进的解决方案:

但是我认为无论如何您的代码有点多余,因为您正在查找与文档 ID 具有相同值的文档字段。您可以将整个代码缩短为

final DocumentSnapshot getuserdoc =
        await Firestore.instance.collection('users').document(userid).get();

调用getuserdoc.data['status']时出错

如果您收到类似于

的错误提示

[](status) 在 null 上被调用

那么这意味着getuserdoc 没有价值。这可能是因为没有具有给定 ID 的此类数据库条目。检查 ID 是否在您的数据库中,否则请在下方评论以获取更多信息,因为提供的代码存在编译错误并且根本无法运行。

【讨论】:

以上是关于FLUTTER FIRESTORE - 查询字段并获取文档 ID 并检查其他字段的主要内容,如果未能解决你的问题,请参考以下文章

FLUTTER,FIRESTORE:我有一个流构建器,它从集合中的所有文档中返回某个字段..如何添加查询?

Flutter Firestore 复合查询

如何使用flutter更新firestore中所有文档的单个字段?

Flutter 和 Firestore 基于位置的查询和数据结构

firebase firestore flutter where 查询

如何在 FireStore 中获取 isAdmin 字段并在 Flutter 中检查它是真还是假