MongoDB 是一个面向文档,schema 无关(schema-less)的数据库,它非常适合于 Node.js 应用以及云端部署。
与 MySQL 及 PostgreSQL 是根据固定的结构设计(schema)将数据存储在表中不同,MongoDB 可以将任意类型的文档数据存储到集合中(schema 无关),这也是 MongoDB 最有意思的特性之一。
mongodb 安装
通过官网的下载页面就能获取到 MongoDB。与此同时,你可以看一下 MongoDB 的入门指南。
安装完后打开 mongo 客户端,输入 mongo
后,显示版本号表示安装成功。
安装 MongoDB 驱动
npm install mongodb
创建数据库
创建 mydb 数据库
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";MongoClient.connect(url, function(err, db) {if (err) throw err;console.log("Database created!");db.close();
});
创建集合
创建 customers 集合
MongoClient.connect(url, function(err, db) {if (err) throw err;var dbo = db.db("mydb");dbo.createCollection("customers", function(err, res) {if (err) throw err;console.log("Collection created!");db.close();});
});
增删改查
添加数据
要将记录或 MongoDB 中所称的文档插入到集合中,我们使用insertOne() 方法。MongoDB 中的文档与 MySQL 中的记录相同,insertOne() 方法的第一个参数是一个对象,包含要插入的文档中每个字段的名称和值。
MongoClient.connect(url, function(err, db) {if (err) throw err;var dbo = db.db("mydb");var myobj = { name: "Company Inc", address: "Highway 37" };dbo.collection("customers").insertOne(myobj, function(err, res) {if (err) throw err;console.log("1 document inserted");db.close();});
});
修改数据
您可以使用updateOne() 方法更新记录或MongoDB中所称的 document。updateOne() 方法的第一个参数是定义要更新的文档的 query 对象。
MongoClient.connect(url, function(err, db) {if (err) throw err;var dbo = db.db("mydb");var myquery = { address: "Highway 37" };var newvalues = { $set: {name: "Mickey", address: "Canyon 123" } };dbo.collection("customers").updateOne(myquery, newvalues, function(err, res) {if (err) throw err;console.log("1 document updated");db.close();});
});
查询数据
要从MongoDB的集合中选择数据,我们可以使用findOne()方法。findOne() 方法返回选择中的第一个匹配项。findOne() 方法的第一个参数是一个 query 对象。
// 查询一条数据
MongoClient.connect(url, function(err, db) {if (err) throw err;var dbo = db.db("mydb");dbo.collection("customers").findOne({}, function(err, result) {if (err) throw err;console.log(result.name);db.close();});
});
在集合中查找文档时,可以使用查询对象筛选结果。
find() 方法的第一个参数是一个查询对象,用于限制搜索。
// 查找 documents 里地址为 Canyon 123 的数据
MongoClient.connect(url, function(err, db) {if (err) throw err;var dbo = db.db("mydb");var query = { address: "Canyon 123" };dbo.collection("customers").find(query).toArray(function(err, result) {if (err) throw err;console.log(result);db.close();});
});
删除数据
要删除记录或MongoDB中所称的文档,我们使用deleteOne() 方法。deleteOne() 方法的第一个参数是定义要删除哪个文档的 query 对象。
MongoClient.connect(url, function(err, db) {if (err) throw err;var dbo = db.db("mydb");var myquery = { address: 'Canyon 123' };dbo.collection("customers").deleteOne(myquery, function(err, obj) {if (err) throw err;console.log("1 document deleted");db.close();});
});