Flutter从MongoDB查询数据时遇编译错误:[]运算符无法用于Future类型
解决Flutter中MongoDB查询的编译错误:运算符‘[]’未针对类型‘Future<List<Map<String, dynamic>>>’定义
错误原因
collection.find().toList()是异步操作,返回的是Future<List<Map<String, dynamic>>>类型对象,而非直接的列表数据。你未用await获取异步操作的实际结果,直接对Future对象使用[]操作符,导致编译错误。
修正方案
- 给
collection.find(...).toList()添加await,获取实际的用户文档列表; - 由于
find返回符合条件的所有文档集合,先判断列表是否非空,再取第一个匹配的文档(按email查询通常仅一个结果),最后访问目标字段。
修正后的完整代码:
void updateCoinsDB() async { var db = await mongoDB.Db.create(MONGO_URL); await db.open(); final collection = db.collection(COLLECTION_NAME); // 用await获取异步操作返回的列表数据 var userList = await collection .find(mongoDB.where.match("email", "demoname@gmail.com").excludeFields([ "_id", "email", "UID", "UserName", ])) .toList(); // 先判断列表是否有数据,避免空指针异常 if (userList.isNotEmpty) { var coins = userList.first['earnedCoinsT']; print(coins); } else { print("未找到匹配的用户"); } await db.close(); }
关于你尝试写法的说明
你用(doc.data() as dynamic)['earnedCoinsT']的写法,是混淆了Firestore与MongoDB Dart驱动的API差异。当前使用的MongoDB Dart驱动中,查询返回的文档本身就是Map<String, dynamic>类型,无需调用data()方法,直接通过键名访问字段即可,这也是你之前写法引发运行时错误的原因。
内容的提问来源于stack exchange,提问作者you are beautiful
相关产品推荐
相关产品推荐

