mongodb数据库入门之CURD简单操作示例

1. MongoDB概述

MongoDB 是一款开源、高性能、文档型的 NoSQL 数据库。相较于传统的关系型数据库,MongoDB 具备更高的扩展性和更好的可扩展性。

MongoDB 中的数据是以文档(document)的形式存储的,文档可以是一个简单的键值对(key-value)结构,也可以是一个内嵌文档或者是一个数组。这使得 MongoDB 在存储半结构化数据时比关系型数据库更加方便。

2. MongoDB CURD操作

在 MongoDB 中,CURD 操作是最基本的操作。具体来说,CURD 操作包括以下四个部分:

2.1 创建数据

在 MongoDB 中,向集合(collection)中插入文档(document)即相当于在关系型数据库中向表(table)中插入数据。我们可以使用 insert() 方法向集合中插入一个文档或者多个文档。

下面是一个简单的示例:

db.collection.insertOne(

{ "name": "张三", "age": 18, "sex": "男", "address": "北京市" }

);

上面这个代码示例就是向 collection 集合中插入一个文档,其中包含四个字段:name、age、sex、address。

2.2 读取数据

常见的读取数据方法有如下两种:

2.2.1 查询所有文档

可以使用 find() 方法查询集合中的所有文档。下面展示的示例代码中可以看到,find() 方法返回的是一个指向文档的游标(cursor),我们可以使用 forEach() 方法来遍历这个游标,输出文档中的字段。

// 查询collection集合中的所有文档

var cursor = db.collection.find();

// 遍历游标并输出文档中的内容

cursor.forEach(function(data) {

print(data.name + "," + data.age + "," + data.sex + "," + data.address);

});

2.2.2 按条件查询文档

在 MongoDB 中,find() 方法的参数可以是一个查询条件(即 where 子句)。下面是一个简单的示例:

// 查询 age 大于等于 18 的文档

var cursor = db.collection.find({ "age": { $gte: 18 } });

// 遍历游标并输出文档中的 name 与 age 字段

cursor.forEach(function(data) {

print(data.name + "," + data.age);

});

2.3 更新数据

更新数据时,我们可以使用 update() 方法修改集合中的文档。

下面是一个示例代码,它将符合条件的文档中的 age 字段增加 1:

db.collection.update(

{ "address": "北京市" }, // 查询条件

{ $inc: { "age": 1 } }, // 更新的文档,这里是将 age 字段加一

{ multi: true } // 如果有多个符合条件的文档,需要将 multi 参数设置为 true

);

2.4 删除数据

删除数据时一般使用 deleteOne() 和 deleteMany() 方法,其中:

deleteOne() 方法用于删除符合条件的第一条文档。

deleteMany() 方法用于删除所有符合条件的文档。

下面的示例代码演示了如何使用 deleteOne() 方法删除 age 等于 18 的文档:

db.collection.deleteOne(

{ age: 18 } // 查询条件

);

3. MongoDB Node.js 驱动程序

对于 Node.js 程序员来说,操作 MongoDB 最方便的方式就是使用 MongoDB Node.js 驱动程序。由于 Node.js 的异步特性,我们使用 MongoDB 驱动程序时需要使用 Promise 或者 async/await 等技术来处理异步回调。

3.1 安装 MongoDB Node.js 驱动程序

可以使用 npm 包管理工具来安装 MongoDB Node.js 驱动程序。

npm install mongodb --save

3.2 连接 MongoDB

在使用 MongoDB 驱动程序进行操作之前,我们需要使用 MongoClient 类来创建一个 MongoDB 的客户端,并连接到数据库。

const MongoClient = require('mongodb').MongoClient;

const url = 'mongodb://localhost:27017/myproject';

MongoClient.connect(url, function(err, client) {

console.log("Connected successfully to server");

const db = client.db(dbName);

client.close();

});

3.3 使用 MongoDB 驱动程序 CURD 操作

下面是一组使用 MongoDB 驱动程序进行 CURD 操作的示例代码,供读者参考。

// 插入数据

const insertDocuments = function(db, callback) {

// 获取到名为 collection 的集合

const collection = db.collection('collection');

// 插入一个文档

collection.insertOne({name: 'Jack', age: 18, sex: '男'}, function(err, result) {

assert.equal(err, null);

console.log("Inserted a document into the collection");

callback(result);

});

};

// 查询数据

const findDocuments = function(db, callback) {

// 获取到名为 collection 的集合

const collection = db.collection('collection');

// 查找所有文档

collection.find({}).toArray(function(err, docs) {

assert.equal(err, null);

console.log("Found the following records");

console.log(docs);

callback(docs);

});

};

// 更新数据

const updateDocument = function(db, callback) {

// 获取到名为 collection 的集合

const collection = db.collection('collection');

// 更新文档

collection.updateOne({ name : "Jack" }, { $set: { age : 19 } }, function(err, result) {

assert.equal(err, null);

console.log("Updated the document");

callback(result);

});

};

// 删除数据

const removeDocument = function(db, callback) {

// 获取到名为 collection 的集合

const collection = db.collection('collection');

// 删除文档

collection.deleteOne({ name : "Jack" }, function(err, result) {

assert.equal(err, null);

console.log("Removed the document");

callback(result);

});

};

3.4 MongoDB 驱动程序中的事务处理

MongoDB 4.0 版本中引入了事务处理功能,可以使用 MongoDB 驱动程序进行事务处理。

下面是一个简单的示例代码:

session.startTransaction();

try {

await salesColl.insertOne({

"employee": employeeId,

"date": new Date(),

"items": [

{ "item": "apple", "quantity": 5, "price": 0.5 },

{ "item": "pear", "quantity": 2, "price": 0.8 }

]

});

await inventoryColl.updateOne(

{ "item": "apple" },

{ $inc: { "qty": -5 } }

);

await inventoryColl.updateOne(

{ "item": "pear" },

{ $inc: { "qty": -2 } }

);

await session.commitTransaction();

console.log("Transaction committed.");

} catch (error) {

// 如果事务处理出现错误,则需要回滚操作

await session.abortTransaction();

console.log("Transaction aborted:", error);

}

4. 总结

本文主要介绍了 MongoDB 数据库的 CURD 操作以及如何使用 MongoDB Node.js 驱动程序进行 CURD 操作。MongoDB 数据库具有高性能、可扩展性、数据灵活性等优势,在分布式、大数据方面的应用上越来越受到了人们的关注。

数据库标签