创建一个node项目,并初始化项目文件
npm init --yes
在项目根目录中创建主文件app.js
使用npm或者cnpm下载mongodb包
$ cnpm install mongodb
创建数据库对象 并连接MongoDB中的数据库
要在 MongoDB 中创建一个数据库,首先我们需要创建一个 MongoClient 对象,然后配置好指定的 URL 和 端口号。
如果数据库不存在,MongoDB 将创建数据库并建立连接。
// 导入MongoDB包模块,并指定导入MongoClient对象
var MongoClient = require('mongodb').MongoClient;
// 指定要连接的数据库url地址,切指定连接的hzh_01这个数据库 如果没有该数据库,就会创建一个
var url = "mongodb://localhost:27017/hzh_01";
// 通过MongoClient对象的静态方法connect连接数据库
/*
参数一url 指定连接的数据库地址
参数二 固定格式
参数三 回调函数 该回调函数会在连接数据库时,自动调用
回调函数参数一 表示调用时出现的错误,即连接失败返回的错误对象
回调函数参数二 表示连接成功后得到的数据库对象 现在db就是 hzh_01这个数据库对象
可以通过该对象对该数据库进行增删改查的操作
*/
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
console.log("数据库已创建!");
// 每次打开数据库,操作完以后都必须通过下面的数据库对象的close()方法,关闭数据库
db.close();
});
数据库操作( CURD )
与 MySQL 不同的是 MongoDB 会自动创建数据库和集合,所以使用前我们不需要手动去创建。
插入数据
插入单条数据
以下实例我们连接数据库 runoob 的 site 表,并插入一条数据条数据,使用 insertOne():
// 插入数据
// 以下实例我们连接数据库 runoob 的 site 表,并插入一条数据条数据,使用 insertOne():
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
// 可以通过db数据库对象的db方法创建一个runoob数据库对象
var dbo = db.db("runoob");
// 定义一个要插入的文档对象,即键值对对象
var myobj = { name: "小浩同学!", url: "在努力学习呀" };
// 通过数据库对象的collection方法指定集合名 ,在通过集合对象的insertOne()方法插入一个行文档
dbo.collection("site").insertOne(myobj, function (err, res) {
/*
参数一,就是要插入的文档对象,键值对对象
参数二,回调函数
err 错误对象
res 就是插入的对象信息
*/
if (err) throw err;
console.log("文档插入成功");
// 关闭当前打开的数据库对象
db.close();
});
});
如果要插入多条数据可以使用 insertMany():
// 插入多条数据 通过insertMany()方法,传递一个对象数组
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
// 通过db数据库对象的db()方法该方法可以进入runoob数据库,没有该数据库会自动创建
var dbo = db.db("runoob");
// 要插入的数据,多条文档对象,要放入数组中
var myobj = [
{ name: '菜鸟工具', url: 'https://c.runoob.com', type: 'cn'},
{ name: 'Google', url: 'https://www.google.com', type: 'en'},
{ name: 'Facebook', url: 'https://www.google.com', type: 'en'}
];
dbo.collection("site").insertMany(myobj, function(err, res) {
if (err) throw err;
console.log("插入的文档数量为: " + res.insertedCount); //res.insertedCount 为插入的条数。
console.log(res);
// 关闭本次打开的数据库
db.close();
});
});
查询数据
可以使用 find() 来查找数据, find() 可以返回匹配条件的所有数据。 如果未指定条件,find() 返回集合中的所有数据。
// 可以使用 find() 来查找数据, find() 可以返回匹配条件的所有数据。 如果未指定条件,find() 返回集合中的所有数据。
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
// 获取数据库对象
var dbo = db.db("hzh_01");
// 调用集合的find()方法获取该集合的所有文档对象,再过toArray()方法将该文档对象转换为一个数组,每一个文档就是该数组的每个元素
/*
toArray()方法,需要传入一个回调函数,可以在回调函数中获取你要的数据
回调函数
参数 err 错误对象,获取失败返回的对象 默认为null
参数 result 获取到的那个对象,即将所有文档转换成功的那个对象数组
*/
dbo.collection("jiheName").find({}).toArray(function(err, result) { // 返回集合中所有数据
if (err) throw err;
console.log(result);
// 关闭本次打开的数据库
db.close();
});
});
查询指定条件的数据
以下实例检索 name 为 “小浩同学!” 的实例:
查询条件 即字段名name为 小浩同学!的那条文档,即那行数据
// 以下实例检索 name 为 "小浩同学!" 的实例:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("runoob");
var whereStr = { "name": '小浩同学!' }; // 查询条件 即字段名为菜鸟教程的那条文档,即那行数据
//可以理解 find()方法可以传递一个参数,是个对象类型,健名即字段名 即列名 值该行在该列的数据
dbo.collection("site").find(whereStr).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
更新数据
更新一条数据
我们也可以对数据库的数据进行修改,以下实例将 name 为 “小浩同学!” 的 url 改为 每天都要努力学习哦
// 更新数据
// 我们也可以对数据库的数据进行修改,以下实例将 name 为 "小浩同学!" 的 url 改为 每天都要努力学习哦
// 更新一条数据
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("runoob");
// 查询条件 查询要修改的那条数据
var whereStr = {"name":'小浩同学!'};
// 将查询到的那行字段中的url列的值 修改为 ---每天都要努力学习哦 健名固定格式
var updateStr = {$set: { "url" : "每天都要努力学习哦" }};
dbo.collection("site").updateOne(whereStr, updateStr, function(err, res) {
if (err) throw err;
console.log("文档更新成功");
db.close();
});
});
更新多条数据
如果要更新所有符合条的文档数据可以使用 updateMany():
// 如果要更新所有符合条的文档数据可以使用 updateMany():
// 更新多条数据
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("runoob");
var whereStr = {"type":'en'}; // 查询条件
var updateStr = {$set: { "url" : "我们都要一起努力学习哦" }};
dbo.collection("site").updateMany(whereStr, updateStr, function(err, res) {
if (err) throw err;
console.log(res.result.nModified + " 条文档被更新"); //result.nModified 为更新的条数。
db.close();
});
});
删除数据
删除一条数据
以下实例将 name 为 “小三” 的数据删除 :
// 删除一条数据
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("runoob");
var whereStr = {"name":'小三'}; // 查询条件 查询要删除的那条数据
dbo.collection("site").deleteOne(whereStr, function(err, obj) {
if (err) throw err;
console.log("文档删除成功");
db.close();
});
});
删除多条数据
如果要删除多条语句可以使用 deleteMany() 方法
以下实例将 type 为 en 的所有数据删除 :
// 删除多条数据
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("runoob");
var whereStr = { type: "en" }; // 查询条件
dbo.collection("site").deleteMany(whereStr, function(err, obj) {
if (err) throw err;
console.log(obj.result.n + " 条文档被删除"); //obj.result.n 删除的条数。
db.close();
});
});
用异步函数实现相同的数据操作 推荐使用,更加方便
实例
const MongoClient = require("mongodb").MongoClient;
const url = "mongodb://localhost/";
// 因为await需要在异步函数中使用,所以需要先定义一个异步函数
async function dataOperate() {
// 定义一个全局的对象,用来存放本次连接的数据库对象
var conn = null;
try {
conn = await MongoClient.connect(url);
console.log("数据库已连接");
const test = conn.db("testdb").collection("test");
// 增加
await test.insertOne({ "site": "runoob.com" });
// 查询
var arr = await test.find().toArray();
console.log(arr);
// 更改
await test.updateMany({ "site": "runoob.com" },
{ $set: { "site": "example.com" } });
// 查询
arr = await test.find().toArray();
console.log(arr);
// 删除
await test.deleteMany({ "site": "example.com" });
// 查询
arr = await test.find().toArray();
console.log(arr);
} catch (err) {
console.log("错误:" + err.message);
} finally {
// 关闭打开的数据库,该语句块,无论什么情况都会被执行
if (conn != null) conn.close();
}
}
// 调用该异步函数
dataOperate();