安装使用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 相关文章推荐
js设置组合快捷键/tabindex功能的方法
Nov 21 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
Jul 18 Javascript
swtich/if...else的替代语句
Aug 16 Javascript
IE6兼容透明背景图片及解决方案
Aug 19 Javascript
JavaScript与HTML的结合方法详解
Nov 23 Javascript
JavaScript 对象详细整理总结
Sep 29 Javascript
利用js判断手机是否安装某个app的多种方案
Feb 13 Javascript
详解webpack+angular2开发环境搭建
Jun 28 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
Mar 06 Javascript
详解ES6 Fetch API HTTP请求实用指南
Nov 14 Javascript
ant-design-vue按需加载的坑的解决
May 14 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
javascript实现拖放效果
2015/12/16 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
python实现随机密码字典生成器示例
2014/04/09 Python
在python中的socket模块使用代理实例
2014/05/29 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
使用python实现链表操作
2018/01/26 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
实例讲解python中的协程
2018/10/08 Python
如何基于python实现不邻接植花
2020/05/01 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
分布式数据库需要考虑哪些问题
2013/12/08 面试题
.NET remoting的两种通道是什么
2016/05/31 面试题
质检的岗位职责
2013/11/17 职场文书
军训学生自我鉴定
2014/02/12 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
平安工地汇报材料
2014/08/19 职场文书
重阳节慰问信
2015/02/15 职场文书
预备党员入党感想
2015/08/10 职场文书
经销商会议开幕词
2016/03/04 职场文书
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android