安装使用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 绑定事件时传递参数的实现方法
Oct 13 Javascript
JS原型对象通俗"唱法"
Dec 27 Javascript
详谈JavaScript 匿名函数及闭包
Nov 14 Javascript
JavaScript获得url所有参数键值表的方法
Mar 21 Javascript
浅谈Javascript中Object与Function对象
Sep 26 Javascript
基于JavaScript实现数码时钟效果
Mar 30 Javascript
Vue的事件响应式进度条组件实例详解
Feb 04 Javascript
js中document.write和document.writeln的区别
Mar 11 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
May 14 Javascript
深入浅析JS中的严格模式
Jun 04 Javascript
JavaScript设计模式之责任链模式实例分析
Jan 16 Javascript
一篇文章带你从零快速上手Rollup
Sep 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
我的论坛源代码(十)
2006/10/09 PHP
PHP中extract()函数的定义和用法
2012/08/17 PHP
php获取文件大小的方法
2014/02/26 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
PHP类型约束用法示例
2016/09/28 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
python线程池的实现实例
2013/11/18 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
白色公司:The White Company
2017/10/11 全球购物
销售演讲稿范文
2014/01/08 职场文书
学期自我评价
2014/01/27 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
办理房产过户的委托书
2014/09/14 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js
Python音乐爬虫完美绕过反爬
2021/08/30 Python
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL