星空网 > 软件开发 > 数据库

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.aspx' >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操作,查看自己的数据是否上传成功。

大致如下:mongoose学习笔记2015

 

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

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




原标题:mongoose学习笔记2015

关键词:Mongo

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

《英国vat长期未申报:避免被罚款的几个注意事项》:https://www.kjdsnews.com/a/1322054.html
德国vat完税程序的最佳解决方案:https://www.kjdsnews.com/a/1322055.html
德国vat税务漏洞让店铺惨遭封闭:https://www.kjdsnews.com/a/1322056.html
德国vat税率详解:https://www.kjdsnews.com/a/1322057.html
德国vat税率及免征额之考量:https://www.kjdsnews.com/a/1322058.html
德国vat申请流程指南:最佳实践与建议:https://www.kjdsnews.com/a/1322059.html
安能物流的2024:变革不能停:https://www.kjdsnews.com/a/1836480.html
深圳中心公园朱顶红花海位置(在哪里+怎么去):https://www.vstour.cn/a/364175.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流