简介
在说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
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。