zoukankan      html  css  js  c++  java
  • mongoose

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用。

    当然要使用的话,必须要先安装好环境Node.js与MongoDB =》 MongoDB安装

    MongoDB是目前最流行的noSQL数据库之一,它是专为node.js而开发的,理解下与我们常用的RDBMS关系型数据库的区别就可以基本使用了

    MongoDB中有三个基本的概念区别于RDBMS

    1. 数据库:数据库是一个物理容器集合。每个数据库都有自己的一套文件系统上的文件。一个单一的MongoDB服务器通常有多个数据库。
    2. 集合:集合是一组MongoDB的文档。它相当于一个RDBMS表。收集存在于一个单一的数据库。集合不执行模式。集合内的文档可以有不同的领域。通常情况下,一个集合中的所有文件是相同或相关的目的
    3. 文档:文档是一组键 - 值对。文件动态模式。动态模式是指,在相同集合中的文档不需要具有相同的字段或结构组的公共字段的集合的文档,可以容纳不同类型的数据。

    下面给出的表显示RDBMS术语使用 MongoDB 的关系

    image

    观察下最重要的一点就是我们关系数据库中的表与字段被合集与文档的概念给替代了,Mongo不在具有主键的关系了,数据保存都是放在文档中用JSON风格键值对风格的文件形式存放

    详细了解可以异步  MongoDB资料汇总专题


    Mongoose中的操作流程

    1. 连接数据库

    var mongoose = require("mongoose");
    
    // 连接字符串格式为mongodb://主机/数据库名
    mongoose.connect('mongodb://localhost/test');

    这里没太多好解释的,安装mongoose后,引入模块连接到本地的mongodb的test表,这里要注意了,mongo数据库是运行状态

    2. 存储数据

    var Schema = mongoose.Schema;
    //骨架模版
    var movieSchema = new Schema({
        doctor   : String,
        title    : String,
        language : String,
        country  : String,
        year     : Number,
        summary  : String,
        poster   : String,
        flash    : String
    })
    //模型
    var Movie = mongoose.model('Movie', movieSchema);
    //存储数据
    var moive = new Movie({
        title: '黑衣人三',
        doctor: '史密斯',
        year: 2018,
        flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf',
        country: '美国',
        language: '英语',
        summary: '好片'
    })
    //保存数据库
    moive.save(function(err) {
        if (err) {
            console.log('保存失败')
            return;
        }
        console.log('meow');
    });

    以上是最简单的数据操作了

    流程就是:通过Schema创建一个模式movieSchema ,通过模式movieSchema创建一个模型Movie,通过模型Movie写入数据,通过save方法保存

    定义schema->创建model->实例化方法

    表 –》 合集 –》 文档

    这里涉及几个名词概念Schema与Model

    3.Schema与Model

    • Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
    • Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对

    虽然模式(Schema)在MongoDB的存储中并不是必须的,但是一般来说为了文档的整齐一致我们在Mongoose中还是会用到模式。可以说,Mongoose中的一切都从定义模式开

    不像传统的关系型数据库一样,比如mysql,连接好数据后直接有把sql语句丢到一个指定的方法中就执行了,这里会有Schema的抽象概念

    Schema它类似于关系数据库的表结构,可以理解为数据库模型骨架

    Schema可以看作工厂中模具一样,好比一个茶杯,喝水是茶杯最终的功能,茶杯本身就像是Model,那么茶杯的批量生产是需要靠工厂的模具成型的,这就像是Schema了

    Schema不仅定义了文档结构和使用性能,还可以有扩展插件、实例方法、静态方法、复合索引、文档生命周期钩子

    4. CURD操作

    Model可以看到关系型数据库中的表,那么通过new Model出来的实例document文档对应的则是关系数据库中表的一行记录

    document有许多内置的实例方法. 可以直接执行增删改查操作

    增加数据

    //模型
    var Movie = mongoose.model('Movie', movieSchema); 
    var moive = new Movie({
        title: '黑衣人三',
        doctor: '史密斯',
        year: 2018,
        flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf',
        country: '美国',
        language: '英语',
        summary: '好片'
    })
    //保存数据库
    moive.save(function(err) {
        if (err) {
            console.log('保存失败')
            return;
        }
        console.log('meow');
    });

    在这里我们通过对模型Movie实例化生成了一个叫moive的文档,并使用save方法将它存储到了集合

    修改数据

    User.update({_id: oneUser._id}, {
        $set: {name: oneUser.name,password:oneUser.password}
    }, function(err) {
        if(err){
            console.log(err)
            return
        }
        console.log('更新成功')
    });

    更新的数据比较少用$set,可用性还是很好

    删除数据

    User.remove({
        _id: id
    }, function(err) {
        if (err) {
            console.log(err)
            return
        }
        console.log('删除成功')
    });

    简单的数据库的连接,跑通了整个流程,具体的可以查看API

    Mongoose API : http://mongoosejs.com/docs/api.html

    附上git上mongoose的一个简单的测试案例

    https://github.com/JsAaron/node_movie/tree/master/data

    支持增加、修改、删除数据

    image

    win平台安装:

    1. 首先要安装好MongoDB安装

    2. 进入目录,通过npm install 安装模块依赖、grunt、mongoose、express、jade

    3. 执行命令grunt,自动检测文件改动重启服务

    4. 打开http://localhost:3000/即可

  • 相关阅读:
    07月26日总结
    07月25日总结
    07月24日总结
    07月23日总结
    07月22日总结
    07月20日总结
    07月19日总结
    spinlock in c++11 based on atomic_flag std::memory_order_acquire
    c++ nullptr
    C++11 新特性: unordered_map 与 map 的对比
  • 原文地址:https://www.cnblogs.com/aaronjs/p/4489354.html
Copyright © 2011-2022 走看看