标签:
前一阵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数据库和关系型数据库的区别和联系?
标签:
原文地址:http://www.cnblogs.com/pageye/p/4673465.html