码迷,mamicode.com
首页 > 其他好文 > 详细

mongoose学习笔记2015-7-24

时间:2015-07-24 15:37:56      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

前一阵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: String
3 });

【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.name
4     ? "Meow name is " + this.name
5     : "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数据库和关系型数据库的区别和联系?

mongoose学习笔记2015-7-24

标签:

原文地址:http://www.cnblogs.com/pageye/p/4673465.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!