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

全部实例下载:

此实例下载》》

Moogoose操作之Schema实现增删查改的更多相关文章

  1. go语言操作mysql范例(增删查改)

    http://blog.csdn.net/jesseyoung/article/details/40398321 go语言连接mysql简介    go官方仅提供了database package,d ...

  2. java代码操作solr搜索引擎的增删查改

    所需的包如图: 代码如下:package solr; import java.util.List;import java.util.Map; import org.apache.solr.client ...

  3. SSH2 增删查改实例

    (一)引入包 (共73个,不一定都需要,但是我的项目是这么多,经过调试,没有包冲突) (二)创建数据库表 建立数据库octtest,并创建user表,表里面一共4个字段:id,姓,名,年龄. 语句如下 ...

  4. [置顶] cocos2dx sqllite 增删查改等操作

    首先导入文件shell.c sqllite3.c sqlite3.h sqlite3etx.h文件(注意在生成安卓项目是 不要将shell.c写进android.mk文件中,写进去在cywin中生成会 ...

  5. 利用dbutils工具实现数据的增删查改操作(dbutis入门)

    一.前期准备 1.安装数据库(如:mysql5.5) 2.安装Eclipse(如:3.4) 3.下载数据库驱动包 4.下载dbutis工具包 5.在Eclipse创建名为 dbutils 的工程并在工 ...

  6. SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...

  7. SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)

    SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE tabl ...

  8. PHP与MYSQL结合操作——文章发布系统小项目(实现基本增删查改操作)

    php和mysql在一起几十年了,也是一对老夫老妻了,最近正在对他们的爱情故事进行探讨,并做了一个很简单的小东西——文章发布系统,目的是为了实现mysql对文章的基本增删查改操作 前台展示系统有:文章 ...

  9. Mybatis基础配置及增删查改操作

    一.简介 平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类. 不仅如此,访问不同的表,还会 ...

随机推荐

  1. 排序+逆向思维 ACdream 1205 Disappeared Block

    题目传送门 /* 从大到小排序,逆向思维,从最后开始考虑,无后向性 每找到一个没被淹没的,对它左右的楼层查询是否它是孤立的,若是++,若不是-- 复杂度 O(n + m),还以为 O(n^2)吓得写了 ...

  2. Visual Studio 2013 EF5实体数据模型 EDMX 使用 T4模板生成后使用 ObjectContext对象

    Visual Studio 2013 EF5实体数据模型 EDMX 使用 T4模板生成后的继承对象为DbContext,以前的熟悉的ObjectContext对象不见了,当然使用ObjectConte ...

  3. silverlight 跨域访问 wcf

    先介绍一下我的测试项目,我用flash和silverlight一同来调用一个webservice,一个flash客户端,一个silverlight客户端,一个web项目来host flash和silv ...

  4. TYVJ P1073 加分二叉树 Label:区间dp

    背景 NOIP2003 提高组 第三道 描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第j个节点的 ...

  5. Google Code Jam 2010 Round 1B Problem A. File Fix-it

    https://code.google.com/codejam/contest/635101/dashboard#s=p0   Problem On Unix computers, data is s ...

  6. cookie 换肤

    jquery.Cookies.js /** * Cookie plugin * * Copyright (c) 2006 ziqiu.zhang * Dual licensed under the M ...

  7. mysql 常用知识

    1.uuid guid UUID是一个由4个连字号(-)将32个字节长的字符串分隔后生成的字符串,总共36个字节长.比如:550e8400-e29b-41d4-a716-446655440000 CH ...

  8. Html - Bootstrap 头部

    <div class="container"> <div class="row clearfix"> <div class=&qu ...

  9. 批量硬关联本地AD帐号与Office云端帐号

    世纪互联给的方案, 说只能一个一个做硬匹配, 把我吓尿了. 我整个简单的, 还能批量做. 1. 将本地域中所有用户的这两个属性导出. Get-ADUser -Filter * -SearchBase ...

  10. HDU 1257 最少拦截系统(Dilworth定理+LIS)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...