MongoDB & Mongoose
MEANの初体验 - MongoDB & Mongoose
MongoDB
Mac 下安装 & 配置 MongoDB
首先去官网下载对应 Mac 版的 MongoDB 压缩包
$ mkdir mongodb
在 mongodb/ 目录下解压下载的安装包 并且将压缩后的资源放在 mongodb/ 目录下
解压后最常用的就是 bin/ 目录 下面包含了常用的一些脚本命令
启动&配置服务器
mongod –config
如果当前在 bin/ 目录下 使用 ./mongod
开启 否则会报错
./mongod --config=../mongod.conf
mongod.conf 可以有我们自主编写
# 修改端口号, 缺省情况下默认端口号 271017
port = 12345
# 设置数据目录, 默认为 /data/db
dbpath = data
# 设置日志输出路径
logpath = log/mongod.log
# 以守护进程方式运行 mongodb
fork = true
关闭服务器
-
Ctrl + C
可以直接退出服务器 -
进入 mongodb 命令行界面 需将数据库切换至admin下
> use admin switched to db admin > db.shundownServer()
Shell 下 MongoDB の 增删改查
启动 Shell 界面
bin/ 目录下使用命令 ./mongo
./mongo
MongoDB shell version: 3.2.1
connecting to: test
>
出现以上信息即进入 Shell 界面成功 默认进入 test 数据库
数据库操作
创建和使用数据库 use
如果 DATABASE_NAME 数据库不存在 则创建该数据库 否则切换至该数据库
>use DATABASE_NAME
switched to db DATABASE_NAME
>
查看所有数据库 show dbs
>show dbs
local 0.000GB
DATABASE_NAME 0.000GB
>
删除数据库 db.dropDatabase()
>db.dropDatabase()
{ "ok" : 1 }
>
以上表示已成功删除当前数据库 默认为 test 可使用 show dbs
查看是否删除成功
数据集合操作
文档的数据结构和JSON基本一样。 所有存储在集合中的数据都是BSON格式。 BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。
向某个集合插入一条数据
>db.COLLECTION_NAME.insert({name: 'haha', age: '2333'})
WriteResult({ "nInserted" : 1 })
>
查询数据
// 查询所有数据
>db.COLLECTION_NAME.find({})
// 查询具体数据
>db.COLLECTION_NAME.find({name: 'haha'})
更新数据
删除数据
// 删除所有数据
>db.COLLECTION_NAME.remove({})
// 删除具体数据
>db.COLLECTION_NAME.remove({name: 'haha'})
Mongoose
安装 & 配置 Mongoose
首先保证已经安装好了 MongoDB 和 NodeJS
$ npm install mongoose -g
使用 mongoose 连接 mongodb
在启动文件 app.js 中配置 mongoose
var mongoose = require('mongoose');
var dbUrl = 'mongodb://localhost/test';
mongoose.connect(dbUrl);
连接信息处理
var db = mongoose.connection;
db.on('error', function(err) {
// do something
});
db.once('open', function() {
// do something
});
在没有配置 Schema 和 Model 的情况下 连接会报错
所以要事先写好 Schema 和 Model 并且在连接后 创建 Model 再做连接处理
Schema
一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
创建 schema.js
-
创建原型
使用
new mongoose.Schema({...})
方法创建模型骨架 定义模型的字段属性var mongoose = require('mongoose'); var schema = new mongoose.Schema({ name: { unique: true, type: String }, age: { type: Number }, ... });
-
创建原型方法
schema.statics = { // 获取当前所有数据 按 age 排序 fetch: function(cb) { return this.find({}) .sort('age') .exec(cb); }, // 根据 _id 查找数据做下一步操作 findById: function(id, cb) { return this.findOne({_id: id}) .exec(cb); }, ... };
-
输出 schema
module.exports = schema;
Model
由Schema发布生成的模型,具有抽象属性和行为的数据库操作对象
创建 model.js
var mongoose = require('mongoose');
// 调用创建好的 schema
var schema = require('./schema');
// 生成对应 model 输出
module.exports = mongoose.model('schema', schema);
初始化 model 后处理连接
// 在 app.js 下
require('./model');
// do somthing with connection...
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error: '));
db.once('open', function() {
console.log('MongoDB is connected !');
});
Mongoose 操作数据
获取 Model
var mongoose = require('mongoose'),
// 创建新实体时需要 Model
Model = require('./model'),
// 获取 model 可使用其方法
model = mongoose.model('schema');
获取当前所有数据
model.fetch(function(err, data) {
if (!err) {
// do something with data
} else {
console.log(err);
}
});
根据 id 查找数据
model.findById(id, function(err, data) {
// do something
});
保存数据
var data = new Model(reqData);
model.save(function(err, data) {
// do something
});
更新数据
// 根据 id 做数据更新
model.update({_id: id}, updateData, function(err) {
// do somthing
});
后台接收更新数据(reqData)向数据库更新
// 首先去数据库找到原始数据
var id = reqData._id;
model.findById(id, function(err, originData) {
// 删除掉更新数据的 id
delete reqData._id;
// 将更新数据更新至原始数据中
Object.keys(reqData).map(function(key) {
originData[key] = reqData[key];
});
// 根据 id 查找到原始数据 后传入更新后的原始数据
model.update({_id: id}, originData, function(err) {
// do somthing
});
});
}
删除数据
// 根据 id 做数据删除
model.remove({_id: id}, function(err) {
// do something
});
END
MongoDB 算是比较容易上手的数据库了 增删改查都非常容易
更多操作和属性可查阅以下资料