美文网首页程序员
mongoose简单使用

mongoose简单使用

作者: 改变自己_now | 来源:发表于2017-05-11 10:37 被阅读314次

    1、简介

    Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具
    要使用它必须安装好mongodb,关于mongodb的安装和使用请参考MongoDB的安装和简单使用
    Github地址:https://github.com/Automattic/mongoose
    API文档:http://mongoosejs.com/docs/guide.html

    2、安装和使用

    2.1、安装:在项目目录中使用npm进行安装

    npm install mongoose
    

    新建一个db.js文件

    ar mongoose = require('mongoose')
    var DB_URL =     'mongodb://localhost:27017/mongooseSample'
    
    //连接数据库
    mongoose.connect(DB_URL)
    
    //连接成功回调
    mongoose.connection.on('connected',function () {
    
    console.log('connect mongodb success')
    })
    
    // 连接错误回调
    mongoose.connection.on('error',function(err){
    
    console.log(err)
    
    })
    
    // 断开连接回调
    mongoose.connection.on('disconnected',function(){
    
    console.log('mongodb disconnected');
    })
    

    运行db.js如果打印connect mongodb success则证明连接成功。
    2.2、schema: 是mongoose里会用到的一种数据模式,可以理解为表结构的定义;每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力。创建UserSchema

    var Schema = mongoose.Schema;
    
    var UserSchema = new Schema(
      username: String,  // 用户账号
      password:String, //密码
      age:String, // 年龄
      loginDate:Date //登录的时间
    })
    

    属性支持的类型有:StringNumberBoolean | BoolArrayBufferDateObjectId | OidMixed

    2.3、生成model:model是由schema生成的模型,可以对数据库的操作。生成UserModel

    var User = mongoose.model('User',UserSchema)
    

    2.4、创建一个user实例插入一条数据

    function insert(){
    
    var user = new User({
    
        username:'xiaoming',
        password:'123',
        age:'27',
        loginDate: new Date()
    })
    
    user.save(function(err,res){
    
        if (err) {
    
            console.log('Error:' + err)
        }else {
    
            console.log('Res:' + res);
        }
    })
    }
    
    
    insert();
    

    在终端查看结果,新建了users集合,成功插入了一条数据

    > show tables
    users
    > db.users.find()
    { "_id" : ObjectId("5913bbbd50e29f099ed1618d"), "username" : "xiaoming", "password" : "123", "age" : "27", "loginDate" : ISODate("2017-05-11T01:17:49.411Z"), "__v" : 0 }
    

    2.5、更新update
    新建一个update.js

      var User = require('./User.js')
    
    //更新
    function update() {
    
    var conditon = {'username':'xiaoming'} // 更新条件
    var updateStr = {'password':'isveryhard'} // 需要跟新的字段
    User.update(conditon,updateStr,function(err,res){
    
        if (err) {
    
            console.log(err)
        }else {
    
            console.log(res)
        }
    })
    }
    
    update();
    

    执行,并在终端查看修改成功了。
    其他更新方法
    Model.findByIdAndUpdate(id, [update], [options], [callback]) 根据_id查询进行更新
    Model.findOneAndUpdate([conditions], [update], [options], [callback]) 查找到一条并更新

    2.6删除方法
    Model.remove(conditions, [callback])
    实例如下:

    var User = require('./User.js')
    
    
    var condition = {'username':'xiaoming'}  // 条件
    
    User.remove(condition,function (err,res) {
        
        if (err) {
            console.log('error' + err)
        }else {
    
            console.log('result' + res)
        }
    })```
    
    终端显示删除成功。
    其他删除方法如下
    `Model.findByIdAndRemove(id, [options], [callback]) `
    `Model.findOneAndRemove(conditions, [options], [callback])`
    2.7查询方法
    `Model.find(conditions, [fields], [options], [callback])`
    实例如下
    

    var User = require('./User.js')

    var conditon = {'username':'xiaoqiang'}

    User.find(conditon,function (err,res) {

    if (err) {
    
        console.log('error' + err)
    }else {
    
        console.log('res' + res)
    }
    

    })```
    其中第二参数可以设置查询输出的字段,改写下上面的代码

        var User = require('./User.js')
    
    var conditon = {'username':'xiaoqiang'}
    
    var fields = {'username':1,'_id':0}  // 其中表示该字段输出,0表示不输出
    
    User.find(conditon,fields,function (err,res) {
        
    
        if (err) {
    
            console.log('error' + err)
        }else {
    
            console.log('res' + res)
        }
    })```
    查询结果只输出:`{ username: 'xiaoqiang' }`
    如果需要查询年龄20-30岁的条件语句怎么写呢?
    
        var condition= {age:{$gte:20,$lte:30}}
    其中$gte:表示大于等于,lte:表示小于等于,下面是其他类似得查询
    

    $or    或关系

    $nor    或关系取反

    $gt    大于

    $gte    大于等于

    $lt     小于

    $lte    小于等于

    $ne 不等于

    $in 在多个值范围内

    $nin 不在多个值范围内

    $all 匹配数组中多个值

    $regex  正则,用于模糊查询

    $size   匹配数组大小

    $maxDistance  范围查询,距离(基于LBS)

    $mod   取模运算

    $near   邻域查询,查询附近的位置(基于LBS)

    $exists   字段是否存在

    $elemMatch  匹配内数组内的元素

    $within  范围查询(基于LBS)

    $box    范围查询,矩形范围(基于LBS)

    $center 范围醒询,圆形范围(基于LBS)

    $centerSphere  范围查询,球形范围(基于LBS)

    $slice    查询字段集合中的元素(比如从第几个之后,第N到第M个元素)```
    数量查询的方法:Model.count(conditions, [callback])
    更加id查询方法:Model.findById(id, [fields], [options], [callback])
    分页查询的方法实例

    var User = require("./user.js");
    
    function getByPager(){
        
        var pageSize = 5;                   //一页多少条
        var currentPage = 1;                //当前第几页
        var sort = {'logindate':-1};        //排序(按登录时间倒序)
        var condition = {};                 //条件
        var skipnum = (currentPage - 1) * pageSize;   //跳过数
        
        User.find(condition).skip(skipnum).limit(pageSize).sort(sort).exec(function (err, res) {
            if (err) {
                console.log("Error:" + err);
            }
            else {
                console.log("Res:" + res);
            }
        })
    }
    
    getByPager();```
    
    其他方法:
    如去重:`Model.distinct(field, [conditions], [callback]) `

    相关文章

      网友评论

        本文标题:mongoose简单使用

        本文链接:https://www.haomeiwen.com/subject/zswntxtx.html