安装使用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 相关文章推荐
jQuery使用手册之 事件处理
Mar 24 Javascript
IE不出现Flash激活框的小发现的js实现方法
Sep 07 Javascript
js关闭子窗体刷新父窗体实现方法
Dec 04 Javascript
jQuery prev ~ siblings选择器使用介绍
Aug 09 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
jquery淡入淡出效果简单实例
Jan 14 Javascript
JS中关于事件处理函数名后面是否带括号的问题
Nov 16 Javascript
layui导航栏实现代码
May 19 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 Javascript
vue 引入公共css文件的简单方法(推荐)
Jan 20 Javascript
vue弹窗消息组件的使用方法
Sep 24 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
Oct 19 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
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python生成随机mac地址的方法
2015/03/16 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
python学习笔记之多进程
2020/08/06 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
日语专业毕业生自荐信
2013/11/11 职场文书
信息管理专业自荐书
2014/06/05 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
安全承诺书格式范本
2015/04/28 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书