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 数据库具有高性能、可扩展性、数据灵活性等优势,在分布式、大数据方面的应用上越来越受到了人们的关注。