2

图片描述

简介

在说MongoDB数据插入操作之前,我们先来简单了解下它的数据逻辑结构。
MongoDB的逻辑结构是一种层次结构,主要由:文档(document)、集合(collection)、数据库(database)这三部分组成的。

  • 文档(document):由键/值对构成,像{a:1}{s:"abc"}等,它是MongoDB核心单元,MongoDB的文档(document),相当于关系数据库中的一行记录。
  • 集合(Collection):多个文档组成一个集合(collection),相当于关系数据库的表。
  • 数据库(database):多个集合(collection),逻辑上组织在一起,就是数据库(database)。

一个MongoDB实例支持多个数据库(database)。

图片描述

  • 模式
  • 模型
  • 文档

快速安装

安装 MongoDB

在 Ubuntu 16.04 上安装 MongoDB 可参考 MongoDB Docs

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
$ echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org

在 CentOS 7 上安装 MongoDB 可参考 MongoDB Docs

$ sudo vi /etc/yum.repos.d/mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
$ sudo yum install -y mongodb-org

工具模块

Mongoose 它能对Mongodb进行建模操作

安装及引用

安装

npm install mongoose

引用mongoose

 var mongoose = require(“mongoose”);

使用mongoose链接数据库

var db = mongoose(“mongodb://user:pass@localhost:port/database”);

示例

var mongoose = require(“mongoose”); 
var db = mongoose.connect(“mongodb://127.0.0.1:27017/test”); 
db.connection.on(“error”, function (error) { 
console.log(“数据库连接失败:” + error); 
}); 
db.connection.on(“open”, function () { 
console.log(“——数据库连接成功!——”); 
});

Schema-模式定义

在模式里面我们对字段进行定义,可以定义字段的类型

var mongoose = require('mongoose')

var MovieSchema = new mongoose.Schema({
  doctor.String,
  title: String,
  language: String,
  country: String,
  year: Number,
  summary: String
})

Model - 编译模型

我们调用mongoose.model时候对传入的Schema也就是模式进行编译,然后生成构造函数

var mongoose = require('mongoose')
var MovieSchema = require('../shemas/movie')

var Movie = mongoose.model(
  'movie',
  'MovieSchema'
)

module.export = Movie

Documents - 文档实例化

有了数据的模型以后,要对文档实例化,只需要调用这个模型,也就是这个构造函数,然后传入一条数据.然后再调save方法jiu能把这条数据存储到数据库里面去

var Movie = require('./models/movie')

var movie = new Movie(){
 title: '机械战警',
 doctor: '何塞.帕蒂利亚',
 year: 2018
}

movie.save(function (err) {
  if (err) return handleError(err)
})

数据库的查询

数据库的查询分为批量的,单条的,或者特定条件的查询

数据库批量查询:

只需要调用模型的find方法

var Movie = require('./models/movie')

app.get('/', function(req, res) {
 Movie
   .find({})
   .exec(function(err, movies) {
     res.render('index', {
       title: 'jx_movie首页',
       movies: movies
     })
   })
})

数据库单条查询

var Movie = require('./models/movie')

app.get('/', function(req, res) {
 Movie
   .findOne({_id: id})
   .exec(function(err, movies) {
     res.render('index', {
       title: 'jx_movie首页',
       movies: movies
     })
   })
})

数据库单条删除

var Movie = require('./models/movie')


app.get('/', function(req, res) {
 Movie
   .remove({_id: id}, function (err, movie) {
     if(err) {
       console.log(err)
     }
   })
   
})

MongoDB基础

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

详解

Schema —— 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现,可以说是数据属性模型(传统意义的表结构),又或着是“集合”的模型骨架。

var mongoose = require("mongoose")
var TestSchema = new mongoose.Schema({
    name : {type:String},
    age : {type:Number,default:0},
    time : {type:Date,default:Date.now},
    emial : {type:String,default:''}
});
 // 基本属性类型有:字符串、日期型、数值型、布尔型(Boolean)、null、数组、内嵌文档等

Model —— 由Schema构造生成的模型,除了Schema定义的数据库骨架以外,还具有数据库操作的行为,类似于管理数据库属性、行为的类。

var db = mongoose.connect("mongodb://127.0.0.1:27017/test");
// 通过Schema创建Model
var TestModel = db.model("test1", TestSchema);

Entity —— 由Model创建的实体,使用save方法保存数据,Model和Entity都有能影响数据库的操作,但Model比Entity更具操作性。

var TestEntity = new TestModel({
    name : "Lenka",
    age : 36,
    email : "lenka@qq.com"
});
console.log(TestEntity.name); // Lenka
console.log(TestEntity.age); // 36

示例

Node.js 连接 MongoDB

$ cnpm install mongodb

与 MySQL 不同的是 MongoDB 会自动创建数据库和集合,所以使用前我们不需要手动去创建。

插入数据

图片描述

图片描述图片描述

这里是用https://mlab.com 建的一个mongodb数据库,我们可以看到

{item: 'buy flowers'}

数据已经写进去了
具体实现可以看这个用 用node+express+mongodb+ejs写的小项目todo_app
Windows 平台安装 MongoDB

Redis 安装

egg-mongoose

egg-mongooseegg.js中操作mogodb的插件。我们以此为例看它如何使用:
图片描述
图片描述
真实项目中:

app/model/user.js

图片描述

config/config.default.js

图片描述

config/plugin.js

图片描述

参考

MongoDB学习笔记之Mongoose的使用
MongoDB入门
教程
https://mlab.com/
Intro to NoSQL / MongoDB

mongoose的一些操作命令


白鲸鱼
1k 声望110 粉丝

方寸湛蓝