mongo_dart

在 Flutter/Dart 中,通过 mongo_dart 库可以方便地访问并操作 MongoDB 数据库。

Note

mongo_dart 不支持 Dart 运行在 Web 网页环境下。


高级主题

在本文中介绍 mongo_dart 的基本使用。对于更加高级用法,请参阅如下目录:


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'];
}

其中:

创建一个 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 中填充方法。

Note

完整的 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);
}

其中:


插入数据

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));
}

网络资源


本文作者:Maeiee

本文链接:mongo_dart

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!