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'})

更新数据

[ MongoDB 更新文档 ]

删除数据

// 删除所有数据
>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 算是比较容易上手的数据库了 增删改查都非常容易

更多操作和属性可查阅以下资料

靠谱资源