程序员

mongoose简单使用

2017-05-11  本文已影响314人  改变自己_now

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]) `
上一篇下一篇

猜你喜欢

热点阅读