Node.js简单操作MongoDB(CRUD)
来源:互联网 发布:福州专业淘宝美工培训 编辑:程序博客网 时间:2024/05/19 11:48
Node.js简单操作MongoDB(CRUD)
首先介绍一下执行环境,node.js是必须要安装的,另外本文使用的是mongoose模块,由于链接的是本地数据库,所以本文例子运行本地的MongoDB,需要另外安装,如果连的是网上的,可以不用本地装MongoDB。另外,express不是必须的。
运行版本(node v5.11.0 + mongoose ^4.4.20)
准备
安装模块后第一件事就是引用,首先,在node入口(如app.js,下面所有代码都放在这个文件内)引入mongoose模块并打开连接
var mongoose = require('mongoose'); var db =mongoose.createConnection('localhost','test'); //上条字段"test"可以不用改,因为安装mongoDB时自带这个数据库
另外需要注意的是,mongoose连接的时候有createConnection和connect两个不同的方法,具体区别可以在网上查,本文就不罗嗦了。
接下来,要写schema,model,他们的作用边写边说。紧接上条代码,先写schema
var usersSchema = new mongoose.Schema({name:String,age:Number}); //注意大小写哦
如你看到的,Schema的作用是可以用来定义UsersSchema的格式,当然你可以在插入数据的时候添加额外的字段,例如sex,只不过如果你插入age的时候插入了字符串,这条记录就会插入失败。(可是name插入Number的时候会被转化为String并插入成功)
然后就是model
var usersModel = db.model('users',usersSchema); //第一个参数对应MongoDB的collection名(类似关系型数据库table名),第二个参数传入mogoose.schema
接下来,可以开始CRUD了!
插入
插入有两种方式,第一种是在model上使用create(doc,callback)直接插入,第二种是从model中实例化一个entity使用save(callback)出来插入,分别如下,请注意参数:
//方法一:model上使用create(doc,callback) var doc={name:"myName",age:18}; usersModel.create(doc,function(error){ if(error){ console.log(error); }else{ console.log('created!') } }) //如果这个usersModel.create(doc,callback)方法使用两次,那么数据库会插入两条记录
//方法二:entity上使用save(callback) var userEntity = new usersModel({name:"Myname2"}); userEntity.save(function(error){ if(error){ console.log(error); }else{ console.log('saved!') } }); //如果这里userEntity.save(callback)使用两次,那么数据库里也只有一条记录
更新
update(criteria,objNew,option,callback)操作可以使用model,不过需要注意几点
update操作默认只更新第一条匹配的记录,如果需要所有匹配,需在如下参数中设置
参数criteria 对象类型,查询条件
参数objNew 对象类型,更新对象(含操作符,如$set,具体可百度mongo操作符)
参数option 对象类型,内有upsert,muti,writeConcern 可选意义分别为
upsert 布尔值,如果没有更新对象,是否插入此新对象(可选)
muti 布尔值,如果匹配的记录有多条,是否更新所有匹配的记录(可选)
writeConcern 抛出异常的级别(可选)
//model上使用update更新 usersModel.update({age:18},{name:"c"},{upsert:false,multi:true},function(error){ if(error){ console.log(error); }else{ console.log('updated!') } })
删除
remove(conditions,callback)同样可以用model的方法
//model上使用remove删除 usersModel.remove({age:18},function(error){ if(error){ console.log(error); }else{ console.log('deleted!') } })
下面说说对于entity上的删除,不敢兴趣可以直接跳过看查询
因为shell中remove可以只删除第一条记录的,比如db.users.remove({age:18},true),后面的true代表only one的意思,不过model的remove可不支持这种写法,那么moogose怎么删除单条记录呢,这里尝试利用model创建过的实体userEntity来删除,代码如下
var userEntity1 = new usersModel({name:"entity1"}); var userEntity2 = new usersModel({name:"entity2"}); //插入 userEntity1 两次, userEntity2 一次 (同一entity save()两次只在db上插入一次) userEntity1.save(function(error){ if(error){ console.log(error); }else{ console.log('entity1_1 saved!') } }); userEntity1.save(function(error){ if(error){ console.log(error); }else{ console.log('entity1_2 saved!') } }); userEntity2.save(function(error){ if(error){ console.log(error); }else{ console.log('entity2 saved!'); //删除userEntity1一次 userEntity1.remove(function(error){ if(error){ console.log(error); }else{ console.log('entity1_1 and entity1_2 deleted!') } }); } }); /* console的结果: entity1_2 saved! entity1_1 saved! entity2 saved! entity1_1 and entity1_2 deleted! 注意:关于异步,entity1_1.save() 、entity1_2.save()、entity2.save()的执行顺序是不一定的,所以我试验中entity1_2比entity1_1先返回 mongoDB的结果: >db.users.find() {"_id":"ObjectId(....)","name":"entity2"} */
然后结果是,同一个entity的记录被删除了
查询
查询find(doc,callback)可以写在model上,如
// find(doc,callback)在Model上的使用,借用上面定义的model,请注意参数 usersModel.find({name:"entity"},function(error,result){ if(error){ console.log(error); }else{ console.log(result); } })
扩展:Schema上写方法
扩展一下,schema可以写方法,schema写方法两种,一种是给实例(entity)用的,一种是给model用的,看例子介绍,下面代码中,我们用前面定义过的usersSchema,用查询做例子
//schema.statics 定义给Model使用的方法 usersSchema.statics.findbyname(name,callback){ return this.model('usersModel').find({name:name},callback) } //用Model使用此方法 usersModel.findbyname('userEntity2',function(error,result){ if(error){ console.log(error); }else{ console.log(result); } })
另外一种方式
//schema.methods 定义给实例使用的方法 usersSchema.methods.findbyname(name,callback){ return this.model('usersModel').find({name:name},callback) } //创建实例使用此方法 var userEntity3 = new usersModel({}); userEntity3.findbyname('userEntity2',function(error,result){ if(error){ console.log(error); }else{ console.log(result); } })
MongoDB shell(选看,以上操作对应的shell命令)
这样注释是不对的,只是方便看。。。
>show dbs //查看数据库(可不查)>use test //切换数据库,如没有,则新建>db.createCollection("users") //新建users集合,类似于关系型数据库的table>show collections //查看集合(可不查)>db.users.find() //查看集合下所有记录,不填参数代表查全部>db.users.insert({name:"userEntity",age:18}) //插入记录>db.users.find() >db.users.update({age:18},{name:"nameupdated"},false,true) //更改(age为18)记录的name的值为"nameupdated",如果没有name则插入,如果匹配多条则全部更新>db.users.find({name:"nameupdated"})>db.users.remove({}) //若不填则删除该集合下全部记录>db.users.find()
以上
QQ号:285482599
有错请指出
- Node.js简单操作MongoDB(CRUD)
- Node.js + MySQL CRUD操作
- Node连接Mongodb以及CRUD操作
- node.js 操作 mongodb
- node.js操作mongodb
- Node.js 操作Mongodb
- Node.js 操作Mongodb
- Node.js 操作Mongodb
- Node.js 操作Mongodb
- node.js操作MongoDB
- mongodb之java CRUD 简单操作
- spring MongoDB 集成crud操作(简单封装)
- mongodb之java CRUD 简单操作
- spring MongoDB 集成crud操作(简单封装)
- MongoDB的一些简单CRUD操作
- Node.js操作mongodb数据库
- Node.js操作mongodb数据库
- Node.js操作mongodb数据库
- 程序员提高效率的必备工具
- (三)JavaScript 的运算符,条件语句,循环语句..
- 电商之梳理mina相关知识---框架
- 电商之梳理jetty相关知识---服务器
- KMP算法-Java实现
- Node.js简单操作MongoDB(CRUD)
- Android之高德接口开发地图(-)
- Genymotion推送2.6.0后几个问题自己解决的办法
- makefile:1: *** 多个目标匹配。 停止。
- Bzoj2626:JZPFAR:K-D-Tree
- Jenkins 安装以及配置全过程(一)
- MySql-索引优化
- Sparse Autoencoder 编程练习
- HDFS基本原理及数据存取实战