• Moogoose操作之Schema实现增删查改


    Schema不仅定义了文档结构和使用性能,可以为后面的Model和Entity提供公共的属性和方法。

    Schema、Model、Entity的关系:

    Schema : 可以定义字段类型,不具备数据库的操作能力

    Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对

    Entity : 由Model创建的实体,他的操作也会影响数据库

    Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性

    基本使用:

    /*****数据库连接*****/
    //引入mongoose模块
    var mongoose = require('mongoose');
    //创建数据库连接
    mongoose.connect('mongodb://localhost/test');
    
    
    /*****Schema使用*****/
    
    //定义kitty属性
    var kittySchema = mongoose.Schema({
        name: String  
    });
    //将该Schema发布为Model,第一个参数为集合名
    var kittyModel = mongoose.model('kitty', kittySchema);
    
    //用module创建kitty实体
    var kittyEntity = new kittyModel({ name: 'tinyphp' });
    console.log(kittyEntity.name);  //打印实体名字
    
    /************/
    

    还可以为添加方法,看红色部分:

    /*****Schema使用*****/
    
    //定义kitty属性
    var kittySchema = mongoose.Schema({
        name: String  
    });
    //为Schema创建方法
    kittySchema.methods.speak=function(){
      console.log('我的名字叫'+this.name);
    }
    //将该Schema发布为Model,第一个参数为集合名
    var kittyModel = mongoose.model('kitty', kittySchema);
    
    //用module创建kitty实体
    var kittyEntity = new kittyModel({ name: 'tinyphp' });
    //console.log(kittyEntity.name);  //打印实体名字
    kittyEntity.speak();
    /************/

    添加以下可以保存数据到数据库

    //执行完成后,数据库就有该数据了
    kittyEntity.save();

     需要注意的是,集合的名字会变成复数,如上:kitty->kitties

    下面将分别实现插入、查询、删除、修改,建议先插入多条数据,以便测试噢~

    module.js

    /*****数据库连接*****/
    //引入mongoose模块
    var mongoose = require('mongoose');
    //创建数据库连接
    mongoose.connect('mongodb://localhost/test');
    
    
    /*****Schema使用*****/
    
    //定义kitty属性
    var kittySchema = mongoose.Schema({
        name: String  
    });
    
    //将该Schema发布为Model,第一个参数为集合名
    mongoose.model('kitty', kittySchema);

    插入 insert.js

    var mongoose = require('mongoose');
    require('./module.js');
    
    //不传Schema时,返回kitty 的model,而此model在module已经发布了
    var kittyModel = mongoose.model('kitty');
    
    //创建实体
    var kittyEntity = new kittyModel({ name: 'Mei' });
    
    //保存数据
    kittyEntity.save(function(err){
        console.log('save status:',err? 'fail':'success');
    });

    查询所有 find.js

    var mongoose = require('mongoose');
    require('./module.js');
    
    var kittyModel = mongoose.model('kitty');
    
    //查询
    kittyModel.find({},function(err,docs){
        if(err){
            console.log('err:',err);
                return;
        }
        console.log('result:',docs);
    });

    模糊查询参考

    var name='x';

    .......find({name: new RegExp("^.*"+name+".*$")}  ...........

    多条件查询 condition.js

    var mongoose = require('mongoose');
    require('./module.js');
    
    var kittyModel = mongoose.model('kitty');
    
    //多条件查询$or、$and等
    var cond = {
        $or:[
            {name:'Mei2'}
        ]
    }
    kittyModel.find(cond,function(err,doc){
        if(err){
            console.log('find by cond err:',err);
                return;
        }
       console.log('cond:',cond,'result:',doc);
    });

    查询某条记录findOne.js

    var mongoose = require('mongoose');
    require('./module.js');
    
    var kittyModel = mongoose.model('kitty');
    
    //查询一条
    kittyModel.findOne({"name":"Mei"},function(err,doc){
        if(err){
             console.log('err:',err);return;
        }
        console.log('findOne result:',doc);
    });

    删除 remove.js

    var mongoose = require('mongoose');
    require('./module.js');
    
    var kittyModel = mongoose.model('kitty');
    
    //先找出来然后删除
    kittyModel.findOne({"name":"Mei"},function(err,doc){
        if(err){
            console.log('err:',err);
                return;
        }
       if(doc){
            doc.remove();
            console.log('删除了');
       }
    });

     删除多条:

    var mongoose = require('mongoose');
    require('./module.js');
    
    var kittyModel = mongoose.model('kitty');
    
    //先找出来然后删除
    kittyModel.find({"name":"tinyphp"},function(err,docs){
        if(err){
            console.log('err:',err);
                return;
        }
       
        for(var i=0;i<docs.length;i++){
             docs[i].remove();
             console.log('deleteId:'+i);
        }
    });

    修改updateOne.js

    var mongoose = require('mongoose');
    require('./module.js');
    
    var kittyModel = mongoose.model('kitty');
    
    //修改一条
    kittyModel.findOne({"name":"Tom"},function(err,doc){
        if(err){
            console.log('err:',err);
                return;
        }
        doc.name='tinyphp';
        doc.save();
        console.log('update result:',doc);
    });

    分别执行node insert.js  ....等就可以看到效果了,图片好占位置,自己对比就好,最最值得注意的是先打开mongoDB的服务,不然也是徒劳。

    全部实例下载:

    此实例下载》》

  • 相关阅读:
    Valid Parentheses
    3Sum
    泛型(一)
    Longest Common Prefix
    Roman to Integer
    Integer to Roman
    Container With Most Water
    知道创宇研发技能表v2.2
    anti-dns pinning 攻击
    dominator
  • 原文地址:https://www.cnblogs.com/tinyphp/p/5715104.html
Copyright © 2020-2023  润新知