安装使用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的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
js输出列表实现代码
Sep 12 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
May 10 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
Oct 12 Javascript
再探JavaScript作用域
Sep 24 Javascript
Vue键盘事件用法总结
Apr 18 Javascript
JS滚动到指定位置导航栏固定顶部
Jul 03 Javascript
angular使用bootstrap方法手动启动的实例代码
Jul 18 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
详解微信小程序框架wepy踩坑记录(与vue对比)
Mar 12 Javascript
微信小程序开发实现消息推送
Nov 18 Javascript
vue之debounce属性被移除及处理详解
Nov 13 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常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
php计算数组不为空元素个数的方法
2014/01/27 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
Python制作CSDN免积分下载器
2015/03/10 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
sublime text 3配置使用python操作方法
2017/06/11 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
python标准库os库的函数介绍
2020/02/12 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
五种Python转义表示法
2020/11/27 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
中国最大的名表商城:万表网
2016/08/29 全球购物
J2EE面试题
2016/03/14 面试题
《窗前的气球》教学反思
2014/04/07 职场文书
统计学教授推荐信
2014/09/18 职场文书
物流业务员岗位职责
2015/04/03 职场文书
文书工作总结(范文)
2019/07/11 职场文书