mongoose学习笔记

一、为什么使用mongoose

 1、避开连接mongo经常要 db.open()和db.close(),数据库操作频繁就会出现  

  Error: db object already connecting, open cannot be called multiple times

   用mongoose就不会出现这错误勒,因为一旦连接好数据库,db就会处于open状态,不存在访问时要打开,然后又要关闭的规则

  2、Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似于ORM工具

二、mongoose的使用

1、mongoose连接

const mongoose = require('mongoose');
var db=mongoose.createConnection('mongodb://39.104.166.99:27017/runoob');

db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
    console.log('mongo is open')
    // we're connected!
});

2、创建集合

var Schema = mongoose.Schema;
var userObj = new Schema({
    name: { type: String, index: { unique: true } },
    nick: String,
    password: String,
    email: String,
    submit: Number,
    solved: Number,
    regTime: String,
    privilege: String
});

//注册静态方法 findByName
userObj.static('findByName', function (name, callback) {
    return this.find({ name: name }, callback);
})

// 创建users集合
var users = db.model('users', userObj);

3、插入数据

var user = {
    name: 'zhouba',
    nick: '周八',
    password: '123456',
    email: 'asdf@qq.com',
    submit: 1,
    solved: 1,
    regTime: 'String',
    privilege: 'String'
}

//创建用户
var createUser = new users(user);
createUser.save((err, doc) => {
    if (err) console.log('err:' + err);
    console.log(doc);
})

// or
users.create(user, (err, doc) => {
    if (err) console.log('err:' + err);
    console.log(doc);
})

4、修改数据

//修改
users.update({ name: 'zhouba' }, { submit: 2 }, (err, rlt) => {
    if (err) console.log('err:' + err);
    console.log(rlt);
})

//批量修改  { multi: true }
users.update({ name: 'zhouba' }, { nick: '粥吧' }, { multi: true },(err, rlt) => {
    if (err) console.log('err:' + err);
    console.log(rlt);
})

5、删除数据

//删除删除所有符合条件的文档
users.remove({ submit: 1 }, (err, rlt) => {
    if (err) console.log('err:' + err);
    console.log(rlt); //{ ok: 1, n: 1 }
})

//最多删除一个文件符合条件的文档
users.deleteOne({ name: 'Eddard Stark' }, function (err) { });

//最多删除所有符合条件的文档,表现的像remove
users.deleteMany({ name: /Stark/, submit: { $gte: 18 } }, function (err) { });

6、查找数据

//查找
users.find({ name: 'zhouba' }, (err, docs) => {
    if (err) console.log('err:' + err);
    console.log(docs);
})

//where 条件 .where('age').gte(21).lte(65).where('name', /^b/i)
users.where('submit').gte(2).exec((err, docs)=> {
    if (err) console.log('err:' + err);
    console.log('docs:' + docs);
})

7、其他

//Query
var query = users.find();
//查询
query.exec(function (err, docs) {
    if (err) console.log('err:' + err);
    console.log(docs);
})

//or  use promise
var promise = query.exec();
promise.then(function (resolve, reject) {
    if (reject) console.log('err:' + reject);
    console.log(resolve);
})

//findById mongoose自带
users.findById('5ae45b6258d8122414f5498b', function (err, docs) {
    if (err) console.log('err:' + err);
    console.log(docs);
})

//此方法为创建model时注册的静态方法
users.findByName('wangwu', (err, docs) => {
    if (err) console.log('err:' + err);
    console.log(docs);
})

更过mongoose API: http://mongoosejs.com/docs/api.html

原文地址:https://www.cnblogs.com/xbblogs/p/8981808.html