安装使用Mongoose配合Node.js操作MongoDB的基础教程


Posted in Javascript onMarch 01, 2016

安装mongoose

使用express准备一个TestMongoDB项目,命令序列如下:

express TestMongoDB
cd TestMongoDB
npm install

执行完上面的命令后,使用下面的命令安装mongoose:

npm install mongoose --save

这个命令会安装mongoose并将其作为项目的依赖,而mongoose依赖的MongoDB driver以及regexp等等模块也会被自动安装。

实例

使用mongoose可以新建数据库、新建集合、对集合内的文档进行CRUD操作,在写代码时,可以对照着mongo shell验证结果是否符合预期。

在TestMongoDB下新建一个mongo.js文件,内容如下:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/accounts');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
 console.log('mongoose opened!');
 var userSchema = new mongoose.Schema({
   name:{type: String, unique: true}, 
   password:String
  }, 
  {collection: "accounts"}
  );
 var User = mongoose.model('accounts', userSchema);

 User.findOne({name:"WangEr"}, function(err, doc){
  if(err) console.log(err);
  else console.log(doc.name + ", password - " + doc.password);
 });

 var lisi = new User({name:"LiSi", password:"123456"});
 lisi.save(function(err, doc){
  if(err)console.log(err);
  else console.log(doc.name + ' saved');
 }); 
});

上面的文件,直接执行“node mongo.js”命令即可查看效果。

要使用mongoose,先require,然后使用connect方法连接数据库。connect原型:

connect(uri, options, [callback])

uri的格式类似:“mongodb://user:pass@localhost:port/database”。

mongoose的connection对象定义了一些事件,比如connected、open、close、error等,我们可以监听这些事件。

在我们的示例代码里,我监听了open事件,在回调函数中,定义了Schema,调用mongoose.model来编译Schema得到Model对象。需要注意的是,定义Schema时指定的collection名字与mongoose.model的第一参数要保持一致。

拿到了Model对象,就可以执行增删改查等操作了。Model对象有find()、findOne()、update()、remove()等方法,和我们在mongo shell里的用法类似。这些方法都有一个可选的callback,当你提供这些callback时,执行的结果会通过这个callback返回给你。如果你不提供,这些方法会返回一个Query对象,你可以再通过Query组装新的选项,然后调用Query的exec(callback)来提交查询。

我在代码里查找WangEr的档案时用了callback,没用Query。

Model对象有个Model(doc)方法,用来构造一个文档(Document)。创建Lisi的文档时就是这种Document对象的save()方法可以将文档保存到数据库。
通过mongoose进行的基本操作:
1、增

var obj = new Movie();
obj.title = '标题一';
obj.content = '内容';
obj.save(function(err) {
  
});

2、删

Movie.remove({
  _id:id
},function (err) {
  
})

3、改

Movie.update({
  _id:id
},json,{},function (err) {
  
})

4、查

Movie.findOne({
  _id: id
}, function(err, obj) {
 
});
Movie.find({}).sort({_id: -1}).limit(3).exec(function(err, obj) {
 
})
Javascript 相关文章推荐
HTML代码中标签的全部属性 中文注释说明
Mar 26 Javascript
ext 同步和异步示例代码
Sep 18 Javascript
ExtJS 设置级联菜单的默认值
Jun 13 Javascript
JavaScript.Encode手动解码技巧
Jul 14 Javascript
javascript温习的一些笔记 基础常用知识小结
Jun 22 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
Oct 29 Javascript
JavaScript定义类和对象的方法
Nov 26 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
Apr 21 Javascript
vue项目中公用footer组件底部位置的适配问题
May 10 Javascript
vue+iview+less 实现换肤功能
Aug 17 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
Sep 12 Javascript
解决element-ui的下拉框有值却无法选中的情况
Nov 07 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
Mar 01 #Javascript
JavaScript html5 canvas绘制时钟效果
Mar 01 #Javascript
javascript使用Promise对象实现异步编程
Mar 01 #Javascript
javascript html5实现表单验证
Mar 01 #Javascript
javascript中FOREACH数组方法使用示例
Mar 01 #Javascript
JS实现Select的option上下移动的方法
Mar 01 #Javascript
angular2使用简单介绍
Mar 01 #Javascript
You might like
提问的智慧(2)
2006/10/09 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
浅谈PHP表单提交(POST&GET&URL编/解码)
2017/04/03 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
浅谈PHP array_search 和 in_array 函数效率问题
2019/10/15 PHP
js实现按一下删除键删除整个单词附demo
2014/09/05 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
浅析JavaScript动画
2015/06/10 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
Python实现带百分比的进度条
2016/06/28 Python
Python中常见的异常总结
2018/02/20 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
python switch 实现多分支选择功能
2020/12/21 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
《记金华的双龙洞》教学反思
2014/04/19 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
端午节寄语2015
2015/03/23 职场文书
回复函格式及范文
2015/07/14 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP