你的位置:首页 > 数据库

[数据库]mongoose学习笔记2015


前一阵byron老师讲了讲mongodb的CRUD操作,内容包括:

如何创建新数据库(use dbname),删除数据库(use dbname →db.dropDatabase()),加入数据(db.collectionname.insert({})),查看表中的数据(db.collectionname.find),排序(sort),数据太多取前几个(.limit),跳过前几个(.skip),limit和skip合起来在做分页的时候最爱用,比如一页就是5个,那就.limit(5).skip(5*n)。更新数据(db.collectionname.update($set))。

具体可参考官网的MongoDB CRUD Operations

在学习完mongoDB的基础上,开始研究怎样在nodejs中操作mongoDB。nodejs通过mongoose来操作mongoDB.

 

这要先保证电脑上装有mongoDB和nodejs

我的入门文档就是这个(mongoose官网上的)【这篇文章其实就是对入门文档的翻译和注解吧】

1.从nodejs操作端进入一个想要放项目的文件夹执行命令:npm install mongoose,安装上mongoose依赖包。之后在文件中新建一个getting-started.js文件。之后想运行数据库就在nodejs终端中输入命令:node getting-started.js

2.打开getting-started.js文件,将mongoose模块引进来,并将mongoose连接到mongoDB上的具体数据库上。这里可以指定连接哪个数据库,比如连接test数据库就这么写

1 var mongoose = require('mongoose');2 mongoose.connect('mongodb://localhost/test');

 3.第二步完成后我们即将连接'test'数据库。我们需要如下代码检测一下,到底连接成功没有。

1 var db = mongoose.connection;2 db.on('error', console.error.bind(console, 'connection error:'));3 db.once('open', function (callback) {4  console.log('数据库连接成功');5 });

 一旦连接成功,我们的回调函数callback就会执行。(节外生枝:此处应该去查查console.error和bind的用法)

4.一切都要从schema开始,mongoose传导数据的过程是这样的:schema生成model,用model生成实例(文档级)。

4.1 schema用来定义生成数据库文档内容的规则以及实例的方法,比如以下的代码定义schema,那么生成的在mongoDB的数据库中就会看到输出格式为

{ "_id" : ObjectId("55b1cb286697a8bc17cce7b8"), "name" : "fluffy", "__v" : 0 },

其中id是默认添加的,而且是随机添加的;__v是版本锁(暂且不知道干什么的) ,也是默认添加的。其余内容的格式就需要自己在schema中定义了。

schema构造器的对象结构中,是key:value结构,key代表我们的属性名称,value代表属性的类型,mongoose现在支持8种类型:String\Number\Date\Buffer\Boolean\Mixed\ObjectId\Array,这些类型中,除了Mixed、ObjectId是Schema.Types的属性外,其它都是javascript自有的属性。

1 var kittySchema = mongoose.Schema({2   name: String3 });

【schema我的理解是类似于js中的构造对象中的类,里面可以定义对象的方法,可以定义对象的属性。schema中定义属性名和属性类型就是类似于js构造对象中定义对象的属性。和不同的是它多了一个步骤是生成model,之后才能new出新的类型实例。 】

4.2 schema汇编形成model。注意model中传入的名字kitten,变成复数之后就是数据库中表collection的名字,比如如果传入kitteny在数据库的表中会显示kittenies这个名字。

1 var Kitten = mongoose.model('Kitten', kittySchema);

5.现在schema,model都设置好了,就可以通过model来生成实例。语法是new

1 var silence = new Kitten({ name: 'Silence' });2 console.log(silence.name); // 'Silence'

6.正如上文提到的,我们还可以在new schema(..)之后给生成的实例写方法。有两种方法,一种是method方法,这个是文档级的,只能给生成的对象添加方法;还有一种是static方法,这个可以给model级添加方法。这次采用method方法。 

1 // NOTE: methods must be added to the schema before compiling it with mongoose.model()2 kittySchema.methods.speak = function () {3  var greeting = this.name4   ? "Meow name is " + this.name5   : "I don't have a name";6  console.log(greeting);7 }8 9 var Kitten = mongoose.model('Kitten', kittySchema);

6.1我们再次生成实例,就会发现实例对象已经获得了speak()方法。

1 var fluffy = new Kitten({ name: 'fluffy' });2 fluffy.speak(); // "Meow name is fluffy"

7.如果你想将数据保存到mongoDB,你可以用save方法

1 fluffy.save(function (err, fluffy) {2  if (err) return console.error(err);3  fluffy.speak();4 });

【注意:mongoose中所有回调函数都是function(err,result)的这种形式,err是报错,result是返回对象(或查询筛选之后)的结果。】

8.mongoose中有很多内置的查询api,比如find,findOne,count,update,remove,有很多和mongoDB的CRUD操作是很相似的。

1 Kitten.find(function (err, kittens) {2  if (err) return console.error(err);3  console.log(kittens);4 })

 

9.好了,现在你可以在node.js中输入 node getting-started.js来启动数据库了,之后开启mongoDB服务,然后在cmd中进入mongoDB操作,查看自己的数据是否上传成功。

大致如下:

 

--------------------------------------------------------------------------------------------------

其他思考:为什么要使用数据库?数据库除了增删改查还能有其他作用吗?nosql数据库和关系型数据库的区别和联系?




几月去青海旅游最好去青海的旅游团价格去青海旅游必去景点去青海旅游要多少钱去青海旅游最佳路线桂林骆驼山_七星公园骆驼山旅游景点介绍 中华民族文化村旅游景点介绍 明思克号航空母舰_明斯克号航母世界旅游景点介绍 2015年学生火车票优惠时间规定 深圳园山风景区团购多少钱?园山风景区电话? 深圳园山公园门票多少钱?园山风景区门票包含什么? 2015清明节鲁冰花童话园门票多少钱?龙门鲁冰花童话园清明节门票价格? 来安徽做花痴 安徽赏花攻略(组图) 新兴天露山五一杜鹃花还有吗?五一去天露山景区杜鹃花好看吗? 霞客古渡游览需要多长时间?上林霞客古渡玩完要多久? 新兴天露山杜鹃花花期多长?云浮天露山杜鹃花开到什么时候? 霞客古渡自助游攻略?上林霞客古渡开车要多久? 泰国有哪些特产?泰国有什么特产? 外国旅游要注意什么? 马尔代夫潜水的最佳季节是?潜水时需要携带哪些装备? 泰式按摩怎么回事?有什么效果啊? AT28HC256E12JU Datasheet AT28HC256E12JU Datasheet AT28HC256E-12JU Datasheet AT28HC256E-12JU Datasheet AT28HC256E-12LM Datasheet AT28HC256E-12LM Datasheet 大庆去港澳3日游 大庆去港澳3日游 大庆去港澳3日游 大兴安岭到香港三日旅游 大兴安岭到香港三日旅游 大兴安岭到香港三日旅游 齐齐哈尔到港澳4日游 齐齐哈尔到港澳4日游 齐齐哈尔到港澳4日游