Skip to content

nodejs如何用mongodb?mongoose就对了

统计信息:字数 3329 阅读7分钟

一,安装

windows平台下官网直接下载安装就好了,centos下安装步骤:

配置MongoDB的yum源

[mongodb-org]
name=MongoDB Repository
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.0/x86_64/
gpgcheck=0
enabled=1

安装MongoDB

安装之前先更新所有包 :yum update

安装命令:yum -y install mongodb-org

查看mongo安装位置 whereis mongod

查看修改配置文件 :vi /etc/mongod.conf 如数据库路径dbpath,bindIp: 172.0.0.1 改为 bindIp: 0.0.0.0

启动停止MongoDB

启动mongodb :systemctl start mongod.service
停止mongodb :systemctl stop mongod.service
查到mongodb的状态:systemctl status mongod.service
设置开机启动:systemctl enable mongod.service
重启mongodb:systemctl restart mongod.service
启动Mongo shell:mongo

二,nodejs库选择

下面三个都不错,我是选择了mongoose主要是github star多,便于使用,而且有中文文档,也一直有更新。

mongodb(也叫 node-mongodb-native)mongodb

官方库,包含了所有且最新的 api,其他大部分的库都是在这个库的基础上改造的。但是呢不支持文档校验,mongodb 是 no schema 的,Mongoose 通过 Schema 支持文档校验,可以防止非正常情况下写入错误的数据到数据库。

Mongoose

封装了数据库的操作,给人的感觉是同步的,其实内部是异步的。功能强大,官方文档详细http://www.mongoosejs.net/

Mongolass

保持mongodb 一样的 api,借鉴了 Mongoose 的优点,同时又保持了精简。

三,数据库链接

新建db.js

'use strict';
var mongoose =require('mongoose');
const dburl='mongodb://localhost/test';
mongoose.connect(dburl);
const db = mongoose.connection;

db.once('open' ,() => {
  console.log('连接数据库成功');
})

db.on('error', function(error) {
  console.error(
    'Error in MongoDb connection: ' + error
  );
  mongoose.disconnect();
});

db.on('close', function() {
  console.log('数据库断开,重新连接数据库');
  mongoose.connect(dburl, {server:{auto_reconnect:true}});
});

module.exports = db;

四,数据库操作

Schema,model的使用

Schema定义。新建user.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

// 声明一个数据集 对象
var userSchema = new Schema({
  username: {
    type: String,
    unique: true
  },
  password: {
    type: String
  }
}, {
  versionKey: false,
  timestamps: true
});
// 将数据模型暴露出去
module.exports = mongoose.model('users', userSchema);

timestamps会自动增加创建时间createdAt,更新时间updatedAt

很多教程是这样的写的

updatedAt: { type: Date, default: Date.now }

这个写法每次更新并不能更新updatedAt这个字段,还是要写代码去处理。

另外注意不能写成default: Date.now()

model的使用

// 查找
User.findOne({
  username: 'abc',
  password: 'abc'
}, function (err, data) {
  if(err) throw err;
  console.log(dat)
})
// 保存
const saveData = {
  username: 'abc',
  password: 'abc',
};
User.create(saveData, function (err, data) {
  if (err) throw err;
  console.log(data);
})

更多详细操作见mongoose官方文档http://www.mongoosejs.net/


Last update: November 9, 2024