• mongoose包操作mongoDB


    阅读此文需要有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)
        }
    })
    

      

  • 相关阅读:
    问题:在手动刷新aspx页面时,出现“不重新发送信息,则无法刷新网页。请单击“重试”,或单击“取消”返回正查看的页。”
    asp.net Listbox实现双向加入、删除
    C#中String对象转换为Font对象的方法
    VS2010中水晶报表应用及实例
    asp.net TreeView中checkBox的单选
    sql server 2005 A字段相同数据的B字段合并
    asp.net 显示柱状图 饼状图
    C#多态
    Css层叠样式
    C#委托
  • 原文地址:https://www.cnblogs.com/zhouxiaohouer/p/7944129.html
Copyright © 2020-2023  润新知