zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    bzoj1014: [JSOI2008]火星人prefix
    bzoj1934: [Shoi2007]Vote 善意的投票&&bzoj2768:[JLOI2010]冠军调查
    bzoj2705: [SDOI2012]Longge的问题
    bzoj4653: [Noi2016]区间
    bzoj2456: mode
    bzoj5018: [Snoi2017]英雄联盟
    关于树论【左偏树】
    caioj1522: [NOIP提高组2005]过河
    caioj1421&&hdu2167: [视频]【状态压缩】选数
    Linux下全局安装composer方法
  • 原文地址:https://www.cnblogs.com/xbblogs/p/8981808.html
Copyright © 2011-2022 走看看