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. apache如何发布地图服务

    svg jpg Tomcat和apache是什么关系呢?:https://www.cnblogs.com/zangdalei/p/8057325.html geoserver又是怎么来的呢? Tomc ...

  2. sqlserver连接-2

    本地连接 方法1. 方法2. 远程连接 如果无法通过IP地址远程连接你的SQL Server 2008服务器,可以参考下面的内容进行设置. 在进行下述设置之前,应该确保你的网络已经安装设置完毕,服务器 ...

  3. womenzijide_jiafenxiang

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  4. Jenkins搭建(by tomcat)

    Jenkins官网https://jenkins.io/download/下载最新版本jenkins.war 把jenkins.war放到tomcat-jenkins的webapps下 修改tomca ...

  5. php面试专题---16、MySQL创建高性能索引考点

    php面试专题---16.MySQL创建高性能索引考点 一.总结 一句话总结: 注意:只写精品 1.索引的基础? 类似书籍的目录:索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录 ...

  6. StringTokenizer拆分字符串

    今天要做一个过滤特殊字符的需求, 看了下公司以前过滤特俗字符代码, 用的居然是 StringTokenizer, 完全不熟悉啊, 于是恶补了一下, 把StringTokenizer在JDK中的文档也翻 ...

  7. day07——css布局解决方案之居中布局

     转行学开发,代码100天——2018-03-23 1.水平居中 使用inline-block + text-align方法 先将子框由块级元素改为行内块元素,再通过设置行内块元素居中以实现水平居中 ...

  8. Linux_Bash常用脚本

    目录 目录 从用户列表中过滤用户名并创建用户 awktrcut 指令的文本处理 tr指令 cut指令 awk指令 备份文件 测试LFTPServer权限设定 开启Httpd 安装Httpd 批量创建用 ...

  9. 让dcef3支持mp3和h.264 mp4解码播放

    嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件.CE ...

  10. Python 图片格式的转换和尺寸修改

    import cv2 import os import numpy as np from PIL import Image import shutil import sys image_size=14 ...