安装使用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基本语法分析说明
Jun 15 Javascript
Node.js实战 建立简单的Web服务器
Mar 08 Javascript
js 调用父窗口的具体实现代码
Jul 15 Javascript
设置checkbox为只读(readOnly)的两种方式
Oct 11 Javascript
Angular.js回顾ng-app和ng-model使用技巧
Apr 26 Javascript
浅谈javascript基础之客户端事件驱动
Jun 10 Javascript
功能强大的Bootstrap组件(结合js)
Aug 03 Javascript
AngularJs基于角色的前端访问控制的实现
Nov 07 Javascript
深入浅析Vue不同场景下组件间的数据交流
Aug 15 Javascript
layui 解决富文本框form表单提交为空的问题
Oct 26 Javascript
vuex实现购物车功能
Jun 28 Javascript
JavaScript中Object、map、weakmap的区别分析
Dec 15 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
PHPCMS的使用小结
2010/09/20 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
CI框架的安全性分析
2016/05/18 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
javascript 树控件 比较好用
2009/06/11 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
python 如何引入协程和原理分析
2020/11/30 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
大专自我鉴定范文
2013/10/01 职场文书
初一英语教学反思
2014/01/11 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
学期个人工作总结
2015/02/13 职场文书
任命书怎么写
2015/03/02 职场文书
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS