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的服务,不然也是徒劳。

全部实例下载:

此实例下载》》

原文地址:https://www.cnblogs.com/tinyphp/p/5715104.html