安装使用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 相关文章推荐
DEFER怎么用?
Jul 01 Javascript
(转载)JavaScript中匿名函数,函数直接量和闭包
May 08 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
Mar 15 Javascript
js window.print实现打印特定控件或内容
Sep 16 Javascript
收集json解析的四种方法分享
Jan 17 Javascript
AngularJS中处理多个promise的方式
Feb 02 Javascript
javascript判断图片是否加载完成的方法推荐
May 13 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
Nov 10 Javascript
vue+node实现图片上传及预览的示例方法
Nov 22 Javascript
使用typescript构建Vue应用的实现
Aug 26 Javascript
JavaScript实现栈结构Stack过程详解
Mar 07 Javascript
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
如何使用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+MYSQL会员系统的开发实例教程
2014/08/23 PHP
PHP加密技术的简单实现
2016/09/04 PHP
prototype1.4中文手册
2006/09/22 Javascript
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
禁止js文件缓存的代码
2010/04/09 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
百度地图api如何使用
2015/08/03 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
[01:04:05]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
django定期执行任务(实例讲解)
2017/11/03 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
python八皇后问题的解决方法
2018/09/27 Python
python中shell执行知识点
2020/05/06 Python
python的flask框架难学吗
2020/07/31 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
阿巴庭院:Abba Patio
2019/06/18 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
征兵宣传标语
2014/06/20 职场文书
数学教研活动总结
2014/07/02 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS