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的服务,不然也是徒劳。
全部实例下载:
Moogoose操作之Schema实现增删查改的更多相关文章
- go语言操作mysql范例(增删查改)
http://blog.csdn.net/jesseyoung/article/details/40398321 go语言连接mysql简介 go官方仅提供了database package,d ...
- java代码操作solr搜索引擎的增删查改
所需的包如图: 代码如下:package solr; import java.util.List;import java.util.Map; import org.apache.solr.client ...
- SSH2 增删查改实例
(一)引入包 (共73个,不一定都需要,但是我的项目是这么多,经过调试,没有包冲突) (二)创建数据库表 建立数据库octtest,并创建user表,表里面一共4个字段:id,姓,名,年龄. 语句如下 ...
- [置顶] cocos2dx sqllite 增删查改等操作
首先导入文件shell.c sqllite3.c sqlite3.h sqlite3etx.h文件(注意在生成安卓项目是 不要将shell.c写进android.mk文件中,写进去在cywin中生成会 ...
- 利用dbutils工具实现数据的增删查改操作(dbutis入门)
一.前期准备 1.安装数据库(如:mysql5.5) 2.安装Eclipse(如:3.4) 3.下载数据库驱动包 4.下载dbutis工具包 5.在Eclipse创建名为 dbutils 的工程并在工 ...
- SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)
SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)-DML 1.SQL INSERT INTO 语句(在表中插入) INSERT INTO 语句用于向表中插入新记录. SQL I ...
- SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)
SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE tabl ...
- PHP与MYSQL结合操作——文章发布系统小项目(实现基本增删查改操作)
php和mysql在一起几十年了,也是一对老夫老妻了,最近正在对他们的爱情故事进行探讨,并做了一个很简单的小东西——文章发布系统,目的是为了实现mysql对文章的基本增删查改操作 前台展示系统有:文章 ...
- Mybatis基础配置及增删查改操作
一.简介 平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类. 不仅如此,访问不同的表,还会 ...
随机推荐
- DFS ZOJ 1002/HDOJ 1045 Fire Net
题目传送门 /* 题意:在一个矩阵里放炮台,满足行列最多只有一个炮台,除非有墙(X)相隔,问最多能放多少个炮台 搜索(DFS):数据小,4 * 4可以用DFS,从(0,0)开始出发,往(n-1,n-1 ...
- 海贼王之——梦想音乐
相信和很多海粉一样,对伙伴的关照和战斗,是相当地震撼. 好东西时不时地听一下,然后感受那种刷新全身表层细胞,触电...: 音乐链接: http://v.youku.com/v_show/i ...
- VMware12版虚拟机怎么安装win7系统
工具/原料 VMware workstation 12 windows7镜像ios系统文件 链接:http://pan.baidu.com/s/1c0YrDgG 密码:vna1 建立一个新的虚拟机 ...
- 【TYVJ】1338 QQ农场(最大流+最大权闭合图)
http://tyvj.cn/Problem_Show.aspx?id=1338 时间才排到rank7,还不快啊囧.isap我常数都写得那么小了... 最大权闭合图看我另一篇博文吧 此题很明显的模型. ...
- 关于实现banner轮换的问题,如何修改
最近遇到了这样的问题,本来banner都是gif格式的,但是现在要求上传图片格式为jpg时,运用JS实现动画效果,原来的也能用. aspx: <div id="bh" run ...
- C++ 'dynamic_cast' and Java 'instanceof' 使用对比
在Java中,如果A是基类,B是A的派生类,那么instanceof可以用来判断一个实例对象是A还是B,相当于一个二元操作符,但与==, >, < 不同的是,它是由字母组成,是Java的保 ...
- XSS的高级利用部分总结 -蠕虫
XSS的高级利用部分总结 -蠕虫,HTTP-only,AJAX本地文件操作,镜象网页本帖最后由 racle 于 2009-5-30 09:19 编辑 XSS的高级利用总结 -蠕虫,HTTPONLY,A ...
- CVE-2013-3908 Internet Explorer打印预览功能可导致信息泄露
原文:http://masatokinugawa.l0.cm/2014/11/ie-printpreview-infoleak.html 问题1: 在IE9和以前的版本当中进行打印预览操作时,IE会取 ...
- [APAC]查找资产表
$sn = Read-Host -Prompt "请输入SN号(7位 or 10位)" $xl = New-Object -ComObject "Excel.Applic ...
- Javascript 笔记与总结(1-1)作用域
以语言的角度学习 Js 的底层原理(与 DOM 无关):① 作用域链 ② 词法分析 ③ 闭包 ④ 面向对象(原型链) ① 作用域链 例1 <script> var c = 5; funct ...