mongo_dart
在 Flutter/Dart 中,通过 mongo_dart
库可以方便地访问并操作 MongoDB 数据库。
mongo_dart
不支持 Dart 运行在 Web 网页环境下。
高级主题
在本文中介绍 mongo_dart
的基本使用。对于更加高级用法,请参阅如下目录:
- DbCollection:CRUD 都是基于集合进行的,在该文中梳理更加高级的检索方法
- WriteConcern:用于控制 MongoDB 写操作的确认方式。
Demo:用户管理
参照《MongoDB 与 Flutter》中的实例,以一个用户管理模块作为介绍。
首先声明用户实体:
import 'package:mongo_dart/mongo_dart.dart';
class User {
final ObjectId id;
final String name;
final int age;
final int phone;
const User({this.id, this.name, this.age, this.phone});
Map<String, dynamic> toMap() {
return {
'_id': id,
'name': name,
'age': age,
'phone': phone,
};
}
User.fromMap(Map<String, dynamic> map)
: name = map['name'],
id = map['_id'],
age = map['age'],
phone = map['phone'];
}
其中:
- id 的类型为
ObjectId
,这是 MongoDB 中的 id 类型
创建一个 database.dart
用于存储数据库连接,以及 CRUD 操作。首先创建一个 MongoDatabase 类:
import 'package:mongo_dart/mongo_dart.dart';
import 'package:mongodb_flutter/models/user.dart';
import '../utils/constants.dart';
class MongoDatabase {
static var db, userCollection;
// Code
}
接下来向 MongoDatabase 中填充方法。
完整的 Demo 实现,请参阅《MongoDB 与 Flutter》一文中配套的《harshshinde07/MongoDB-Flutter》,它还包含通过 Flutter UI 访问数据库的演示。
连接数据库
MongoDatabase 的 connect 为连接 MongoDB 数据库:
static connect() async {
db = await Db.create(MONGO_CONN_URL);
await db.open();
userCollection = db.collection(USER_COLLECTION);
}
其中:
- 先通过 create 创建一个 Db 实例
MONGO_CONN_URL
为 MongoDB 地址,格式为"mongodb+srv://<USER>:<PASS>@<DB>/<COLLECTION>;
- open 方法建立远程连接
- 最后从数据库中获取到 userCollection,存到 userCollection 属性中,供后续访问
插入数据
MongoDatabase 的 insert 方法用于插入数据:
static insert(User user) async {
await userCollection.insertAll([user.toMap()]);
}
mongo_dart
接收的数据类型为 Map,需要一个从 Model 到 Map 的转换。
插入数据的 ObjectId
在创建新 User 时,如果我们未指定 id(ObjectId),在插入数据时,MongoDB Server 会自动创建一个 ObjectId。
我们可以用插入后返回值中的 ObjectId 来更新 User 实例。
但一种更简单的方法,是在创建 User 时在 Client 侧本地创建 ObjectId:
User user = User(
id: ObjectId(),
// 其他字段
)
在 MongoDB Server 侧,看到 client 传来的新数据已经包含 id,则使用该 id 创建新数据。
读取数据
MongoDatabase 的 getDocuments 方法用于获取数据:
static Future<List<Map<String, dynamic>>> getDocuments() async {
try {
final users = await userCollection.find().toList();
return users;
} catch (e) {
print(e);
return Future.value(e);
}
}
更新数据
MongoDatabase 的 update 方法用于更新数据:
static update(User user) async {
var u = await userCollection.findOne({"_id": user.id});
u["name"] = user.name;
u["age"] = user.age;
u["phone"] = user.phone;
await userCollection.save(u);
}
在上述实现中,首先通过 id
获取到数据库中的数据,之后逐个字段对其进行更新,最后调用 save
方法保存。
删除数据
MongoDatabase 的 delete 方法用于删除数据:
static delete(User user) async {
await userCollection.remove(where.id(user.id));
}
网络资源
- Flutter & MongoDB | Support And Compatibility | MongoDB | MongoDB
- MongoDB 与 Flutter
- Flutter :MongoDB CRUD. MongoDB integration in Flutter with… | by Vikranth Salian | Medium
- Accessing MongoDB Purely via Dart- GeekyAnts
- mongo_dart | Dart Package (pub.dev)
本文作者:Maeiee
本文链接:mongo_dart
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!