博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongodb使用简介
阅读量:6712 次
发布时间:2019-06-25

本文共 3409 字,大约阅读时间需要 11 分钟。

mongodb简介

在使用nodejs时候,需要存储一些简单json数据的情况下,很多人会推荐使用mongodb。mongodb是一个文档型数据库,在 sql 中,数据层级是:数据库(db) -> 表(table) -> 记录(record)-> 字段;在 mongodb 中,数据的层级是:数据库 -> collection -> document -> 字段。其他更多详细的概念可以去官网等地方查询,我的主要目的是结合nodejs尽快用起来。

mongodb使用准备

  • nodejs的安装就不再介绍了。
  • mongodb的安装在mac上推荐使用brew:

    brew install mongodb

    安装好以后在在命令行窗口输入mongod,就可以启动mongodb,然后新开一个shell窗口,输入mongo,就可以使用shell命令来创建操作数据库,具体命令都可以在官网找到,熟悉一些基本的命令show、use、find等就可以了。下面我们主要在nodejs中使用moogoose来操作数据库。

moogoose使用简介

moogoose是一个odm,object-document mapping,对象文档映射。它的作用就是,在程序代码中,定义一下数据库中的数据格式,然后取数据时通过它们,可以把数据库中的 document 映射成程序中的一个对象,这个对象有 .save .update 等一系列方法,和 .title .author 等一系列属性。在调用这些方法时,odm 会根据你调用时所用的条件,自动转换成相应的 mongodb shell 语句帮你发送出去。自然地,在程序中链式调用一个个的方法要比手写数据库操作语句具有更大的灵活性和便利性。在nodejs中使用moogoose有一个简单的demo:

// 首先引入 mongoose 这个模块var mongoose = require('mongoose');// 然后连接对应的数据库:mongodb://localhost/test// 其中,前面那个 mongodb 是 protocol scheme 的名称;localhost 是 mongod 所在的地址;// 端口号省略则默认连接 27017;test 是数据库的名称// mongodb 中不需要建立数据库,当你需要连接的数据库不存在时,会自动创建一个出来。mongoose.connect('mongodb://localhost/test');// 上面说了,我推荐在同一个 collection 中使用固定的数据形式。// 在这里,我们创建了一个名为 Cat 的 model,它在数据库中的名字根据传给 mongoose.model 的第一个参数决定,mongoose 会将名词变为复数,在这里,collection 的名字会是 `cats`。// 这个 model 的定义是,有一个 String 类型的 name,String 数组类型的 friends,Number 类型的 age。// mongodb 中大多数的数据类型都可以用 js 的原生类型来表示。至于说 String 的长度是多少,Number 的精度是多少。String 的最大限度是 16MB,Number 的整型是 64-bit,浮点数的话,js 中 `0.1 + 0.2` 的结果都是乱来的。。就不指望什么了。。// 这里可以看到各种示例:http://mongoosejs.com/docs/schematypes.htmlvar Cat = mongoose.model('Cat', {  name: String,  friends: [String],  age: Number,});// new 一个新对象,名叫 kitty// 接着为 kitty 的属性们赋值var kitty = new Cat({ name: 'Zildjian', friends: ['tom', 'jerry']});kitty.age = 3;// 调用 .save 方法后,mongoose 会去你的 mongodb 中的 test 数据库里,存入一条记录。kitty.save(function (err) {  if (err) // ...  console.log('meow');});

moogoose中三个基本概念

上面的demo就可以简单使用起来mongodb存储一条记录,但是对于mongodb三个最基本的概念Schema, Model, Entity并未涉及太多。在项目应用时候,需要严格的划分定义。

  • Schema

    一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力,仅仅是定义数据属性的一个模型。在Schema中可以定义方法,一个简单的例子如下:

    var mongoose = require('mongoose');var MovieSchema = new mongoose.Schema({    doctor: String,    title: String,    language: String,    country: String,    year: String,    summary: String,    poster: String,    meta: {        createAt: {            type: Date,            default: Date.now()        },        updateAt: {            type: Date,            default: Date.now()        }    }});MovieSchema.statics = {    fetch: function (cb) {        return this            .find({})            .sort('meta.updateAt')            .exec(cb);    },    findById: function (id, cb) {        return this            .findOne({_id: id})            .exec(cb);    }};
  • Model

    由Schema发布生成的模型,具有抽象属性和行为的数据库操作对。可以认为是一个管理数据库属性、行为的类。具体例子如下:

    var Movie=mongoose.model('Movie', MovieSchema);
  • Entity

    由Model创建的实体,他的操作也会影响数据库。他的方法和Model上操作的方法有些区别,比如新增是save,而model上是create。项目中使用的一个片段如下:

    _movie = new Movie({  doctor: movieObj.doctor,  title: movieObj.title,  language: movieObj.language,  country: movieObj.country,  year: movieObj.year,  poster: movieObj.poster,  flash: movieObj.flash,  summary: movieObj.summary});_movie.save(function(err, movie) {  if (err) {    console.log(err);  }  res.redirect('/movie/' + movie._id);});

    其中_movie就是Entity,利用.save在数据库中新增了一条记录。

总结

本文简单介绍了一下mongodb和mongoose的基本使用,就可以在项目中简单的使用起来,关于其中的更具体的用法和一些区别,需要进一步探索和使用。

参考资料

主要参考了以下两篇文章,引用了其中一些定义和一个demo。

1.

2.

转载于:https://www.cnblogs.com/lijie33402/p/6364183.html

你可能感兴趣的文章
Zabbix 中文显示(学习笔记四)
查看>>
财报显示阿里云“可怕”之处 和AWS等全球头部云厂商还差多少?
查看>>
Android GreenDao常用注解
查看>>
二十分钟教你如何将区块链应用与函数计算相结合
查看>>
Bootstrap wysiwyg,将富文本数据保存到mysql
查看>>
Linux cron crontab用法(转载)
查看>>
hadoop伪分布式安装部署HIVE
查看>>
Android Service与Activity之间通信的几种方式
查看>>
Bash脚本显示当前系统运行报告
查看>>
在Unix上使用管道压缩exp导出文件
查看>>
python click模块-命令行神器
查看>>
Python中time模块
查看>>
AfxBeginThread和AfxEndThread及线程资源分配和释放
查看>>
检查Linux服务器性能
查看>>
EIGRP认证配置
查看>>
链路直连ping不通处理步骤
查看>>
安装及卸载django
查看>>
(C#)Windows Shell 外壳编程系列6 - 执行
查看>>
linux命令:编译安装iptables
查看>>
oracle连接进程数设置
查看>>