nodejs如何用mongodb?mongoose就对了

一,安装

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

1,配置MongoDB的yum源

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

2,安装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

3,启动停止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库选择,下面三个都不错,我是选择了mongooes主要是github star多,便于使用,而且有中文文档,也一直有更新。

1,mongodb(也叫 node-mongodb-native)mongodb

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

2,Mongoose

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

3,Mongolass

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

三,数据库链接,新建db.js

<code>'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;/<code>

四,数据库操作,Schema,model的使用

1,Schema定义。新建user.js

<code>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);/<code>

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

很多教程是这样的写的

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

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

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

2,model的使用

查找

<code>User.findOne({
        username: 'abc',
        password: 'abc'
    }, function (err, data) {
        if(err) throw err;
        console.log(dat)
    })/<code>

保存

<code>
const saveData = {
    username: 'abc',
    password: 'abc',
};
User.create(saveData, function (err, data) {
    if (err) throw err;
    console.log(data);
})/<code>

更多详细操作见mongoose官方文档


分享到:


相關文章: