安装使用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 相关文章推荐
JavaScript 直接操作本地文件的实现代码
Dec 01 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
浅谈jQuery中replace()方法
May 13 Javascript
javascript动态添加删除tabs标签的方法
Jul 06 Javascript
浅析JavaScript函数的调用模式
Aug 10 Javascript
json与jsonp知识小结(推荐)
Aug 16 Javascript
Vue.js之slot深度复制详解
Mar 10 Javascript
d3.js入门教程之数据绑定详解
Apr 28 Javascript
vue通过点击事件读取音频文件的方法
May 30 Javascript
对VUE中的对象添加属性
Sep 18 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
Mar 09 Javascript
微信小程序实现分页加载效果
Nov 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源代码数组统计count分析
2011/08/02 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
event对象的方法 兼容多浏览器
2009/06/27 Javascript
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
python文件特定行插入和替换实例详解
2017/07/12 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
python手写均值滤波
2020/02/19 Python
python logging.info在终端没输出的解决
2020/05/12 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
深圳-东方伟业笔试部分
2015/02/11 面试题
技术负责人岗位职责
2015/02/10 职场文书