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

  • 相关阅读:
    11. Container With Most Water(装最多的水 双指针)
    64. Minimum Path Sum(最小走棋盘 动态规划)
    数组相关
    88. Merge Sorted Array(从后向前复制)
    京东AI平台 春招实习生面试--NLP(offer)
    54. Spiral Matrix(矩阵,旋转打印)
    48. Rotate Image(旋转矩阵)
    春招实习--阿里 蚂蚁金服 支付宝 机器学习面试
    26. Remove Duplicates from Sorted Array(删除排序数组中的重复元素,利用排序的特性,比较大小)
    7. Reverse Integer(翻转整数)
  • 原文地址:https://www.cnblogs.com/xbblogs/p/8981808.html
Copyright © 2011-2022 走看看