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.html
var 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.mongodb简介

2.mongoose简介

mongodb使用简介的更多相关文章

  1. MongoDB数据库简介及安装

    一.MongoDB数据库简介 简介 MongoDB是一个高性能,开源,无模式的,基于分布式文件存储的文档型数据库,由C++语言编写,其名称来源取自"humongous",是一种开源 ...

  2. MongoDB入门简介

    MongoDB入门简介 http://blog.csdn.net/lolinzhang/article/details/4353699 有关于MongoDB的资料现在较少,且大多为英文网站,以上内容大 ...

  3. MongoDB(一)——简介

    这两天简单学习了一下MongoDB数据库,属于NoSQL类型数据库的一种,先简单宏观的看一下NoSQL的相关知识和MongoDB的基础知识. NoSQL是Not Only SQL的缩写,它指的是非关系 ...

  4. 2.MongoDB数据库简介

    1).简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. mongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...

  5. MongoDB第一天(MongoDB的简介和安装)

    MongoDB 简介 什么是 MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++语言编写.在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关 ...

  6. mongoDB 数据库简介

    背景概念-数据库类型 对比关系型数据库 优点 : 逻辑清晰.容易理解,结构类似表格 使用 sql 语句技术成熟,使用方便 数据一致性好,完整性好 关系型数据库比较成熟,可以使用一些复杂操作 缺点 : ...

  7. MongoDB入门教程二[MongoDB Shell 简介与使用]

    MongoDB Shell 是MongoDB自带的JavaScript Shell,随MongoDB一同发布,它是MonoDB客户端工具,可以在Shell中使用命令与MongoDB实例交互,对数据库的 ...

  8. MongoDB入门---简介

    最近呢,刚好有一些时间,所以就学习了一下新的数据库类型MongoDB.要想了解这个MongoDB,我们首先需要了解一个概念,那就是nosql(not only sql).一下就是官方的概念: NoSQ ...

  9. Mongodb之简介

    MongoDB是一个基于分布式存储的数据库,由C++语言编写,旨在为WEB应用提供的可扩展的高性能数据存储解决. MongoDB是介于关系型数据库与非关系型数据库之间的产品,也是非关系型数据库中功能最 ...

随机推荐

  1. Linux 系统参数优化

    修改系统所有进程可打开的文件数量 sysctl -w fs.file-max=2097152sysctl -w fs.nr_open=2097152 > vi /etc/sysctl.conff ...

  2. jquery ajax请求回调

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Drawer实现侧边栏布局

    在 Scaffold 组件里面传入 drawer 参数可以定义左侧边栏,传入 endDrawer 可以定义右侧边栏.侧边栏默认是隐藏的,我们可以通过手指滑动显示侧边栏,也可以通过点击按钮显示侧边栏.  ...

  4. [CSP-S模拟测试]:Dash Speed(线段树+并查集+LCA)

    题目描述 比特山是比特镇的飙车圣地.在比特山上一共有$n$个广场,编号依次为$1$到$n$,这些广场之间通过$n−1$条双向车道直接或间接地连接在一起,形成了一棵树的结构. 因为每条车道的修建时间以及 ...

  5. 后端技术杂谈9:先搞懂Docker核心概念吧

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  6. vue里面的this指向

    this.$http.jsonp(api).then(function(response){ console.log(response); console.log(this); this.list=r ...

  7. 【CDN+】 CDN项目的两大核心--缓存与回源

    前言 项目中碰到CDN专用名词: 回源, 然后不知道什么意思,反过来查询了一下CDN相关的一些基本术语,特做记录 CDN基础概念 CDN (Content Delivery Network,即内容分发 ...

  8. day03—JavaScript中DOM的Event事件方法

    转行学开发,代码100天——2018-03-19 1.Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用, ...

  9. Linux下jdk1.6安装指引

    Linux安装JDK步骤1. 先从网上下载jdk(jdk-6u4-linux-x64-rpm.bin) ,推荐SUN的官方网站www.sun.com,下载后放在/home目录中,当然其它地方也行. 进 ...

  10. C#调取接口时报错:服务器提交了协议冲突. Section=ResponseStatusLine

    private Dictionary<string, Object> GetLocation(string imei) { #region===代码=== string serviceAd ...