标签:efi mod 回调 分页 自定义 属性 对象 date validate
阅读此文需要有mongoDB的基础知识
在nodejs里操作mongo数据库
先了解几个概念:
mongodb和mongoose
mongodb包是为程序提供的一个驱动来操作mongoDB数据库
mongoose包是基于mongodb构建的一个对象操作模型,适用于nodejs
mongoose中比较重要的三个概念:
Schema,用来定义数据库的结构,比如key的数据类型,文档里都有哪些key,key的value值都有哪些特征等。schema不具备操作数据库的能力。
Model,由schema编译出的构造器,用来定义集合模型,Model的实例即是文档。model具备数据库的增删改查。
Entity,由model构造器创建的实体,即文档document。
var mongoose = require(‘mongoose‘)
连接数据库user
mongoose.connect("mongodb://127.0.0.1:27017/user")
定义schema
var userSchema = new mongoose.Schema({
id:Number,
name:{reuired:true,default:‘undefined‘,match:/a/},
age:Number
})
schema还可以细化key的其他属性,即文档验证,通过文档验证的文档才会被保存,反正则不会保存,还会报错。
type:数据类型,如Number,String
required: true数据必须填写, false非必须数据
default: 默认值
validate: 自定义匹配,值是自定义函数,返回值是布尔值,true通过,false不通过
min: 最小值(只适用于数字)
max: 最大值(只适用于数字)
match: 正则匹配(只适用于字符串)
enum: 枚举匹配(只适用于字符串)
定义model,其中testco即是集合名
var userModel = mongoose.model(‘testco‘,userSchema)
生成entity
var doc = new userModel({
id:1,
name:‘aa‘,
age:23
})
定制化的schema需要new mongoose.Schema()
model则是调用mongoose.model()
定制化entity则需要new model()
在mongo的shell后台里,操作方法基本都是在集合下调用,mongoose也是如此,model充当的集合的角色,自然也是在它下操作数据库。
参考链接:http://www.nodeclass.com/api/mongoose.html#model-js
增
Model.create(doc(s),(err,doc(s))=>{})
eg.
userModel.create({id:2,name:"bb",age:33},{id:3,name:"cc",age:3},(err,doc1,doc2)=>{
console.log(doc1)
//{id:2,name:"bb",age:33}
console.log(doc2)
//{id:3,name:"cc",age:3}
})
new Model(doc).save()
eg.
new userModel({id:1,name:‘aa‘,age:23}).save()
删
在model上删文档
Model.remove(conditions,(err,doc)=>{})
在文档上删文档
eg.
Model.find({id:{$lte:5}},(err,docs)=>{
docs.remove()
})
改
Model.update(conditions,update,(err,raw)=>{})
查
Model.find(conditions, [fields], [options], [(err,docs)=>{}])
参数:查询条件,控制返回的字段(字段筛选),配置查询参数,回调函数
conditions查询条件参考mongo语法,比如$lte:32之类的
fields即是控制返回数据的字段,就是说你想要哪些key,想要返回name就写‘name‘,此时默认会返回_id值,写成{name:1,_id:0}即可
options配置查询参数,比如做分页的时候{limit:20}表示返回20条数据(不足返回全部)
callback中err表示查询错误,docs表示返回的结果
.findOne()表示返回数据中的第一条,.findById()表示根据obj.id查找
查询后操作
sort 排序
skip 跳过
limit 限制
select 显示字段
exec 执行
id降序,age升序排序
Model.find().sort(‘-id age‘).exec((err,docs)=>{})
跳过前三条数据
Model.find().skip(3).exec((err,docs)=>{})
只显示13条数据
Model.find().limit(13).exec((err,docs)=>{})
只显示name age字段,不显示id
Model.find().select(‘name age -id‘).exec((err,docs)=>{})
以上可以连起来写,查找到的数据按id降序age升序,跳过前3,只显示13条,每条数据只显示name,age字段,不显示id
Model.find().sort(‘-id age‘).skip(3).limit(13).select(‘name age -id‘).exec((err,docs)=>{
console.log(docs)
})
分页小例子:
定义页码,定义每页多少条,定义
let page = req.param(‘page‘)
let pageSize = 20
let skip = (page-1)*pageSize
model.find().skip(skip).limit(pageSize).exec((err,docs)=>{
if (err) {
data.push({
status = 1,
msg:‘数据错误‘
})
}else{
data.push(doc)
}
})
标签:efi mod 回调 分页 自定义 属性 对象 date validate
原文地址:http://www.cnblogs.com/zhouxiaohouer/p/7944129.html