mongo

9/27

mongoDB 基本知识

数据库(Database)

数据库分类

  1. 关系型数据库 (RDBMS)

    • SQL 结构化查询语言,是一门标准的语言,与 JAVA、C、JS
    • MySQL、Oracle、DB2、SQL Server …
    • 关系数据库中全都是表
  2. 非关系型数据库 (No SQL Not Only SQL)

    • MongoDB、Redis ……
    • 键值对数据库 其他 No SQL 数据库
    • 文档数据库 MongoDB

MongoDB 简介

安装 MongoDB

完整安装步骤

  1. 配置环境变量

  2. 指定端口和路径

    • mongod --dbpath C:\Users\lilichao\Desktop\mongo\data\db --port 123
    • 默认端口号:27017
    • 1547132328933
  3. 打开 cmd 命令行窗口

    • 输入 mongod 启动 mongodb 服务器
    • mongod 用来启动数据库服务器
    • 服务器用来保存数据
  4. 再打开一个 cmd 窗口

    • 输入 mongo 连接 mongodb,出现 >
    • mongo 用来启动数据库客户端
    • 客户端用来操作服务器,对数据进行增删改查的操作
  5. 将 MongoDB 设置为系统服务

    • 可以自动在后台启动,不需要每次都手动启动
    • 在 c 盘根目录创建 data
      • 在 data 下创建 db 和 log 文件夹
      • log,日志,启动服务器的时候自动弹出的信息,其实就是日志,设置好后会把日志写到 log 文件夹里
    • 创建配置文件
      • 在目录 C:\Program Files\MongoDB\Server\3.2 下添加一个配置文件 mongod.cfg
    • 以管理员的身份打开命令行窗口
    • 执行如下的命令
      • sc.exe create MongoDB binPath= "\"F:\ MongoDB\Server\3.2\bin\mongod.exe\" --service --config=\"F: \MongoDB\Server\3.2\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
        
        sc.exe create MongoDB binPath= "\"mongod的bin目录\mongod.exe\" --service --config=\"mongo的安装目录\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
        
        sc.exe create MongoDB binPath= "\"F:\MongoDB\Server\3.2\bin\mongod.exe\" --service -- config=\"F:\MongoDB\Server\3.2\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
        
  6. 启动 mongodb 服务

    • 如果启动失败,证明上边的操作有误
    • 在控制台输入 sc delete MongoDB 删除之前配置的服务
    • 然后从第一步再来一次
    • 错误 1053:路径有错误,从 word 复制到 txt 可能加上了一些空格之类的,严格对照
  7. 在任务管理器的服务,设置 MongoDB 为自动

MongoDB 常用指令

1547132616075

2. 基本概念

三个概念

数据库(database)

集合(collection)

文档(document)

1547132712733

3. 基本指令

插入文档

db.collection.insert(doc)

{name:"孙悟空",age:18,gender:"男"}
db.stus.insert({name:"孙悟空",age:18,gender:"男"})

注意

db.collection.insertOne(doc)

db.collection.insertMany(doc)

查询文档

db.collection.find()

db.collection.find({字段名:值})

db.collection.findOne()

db.collection.find().count()

修改文档

db.collection.update(<query>,<update>,{options})

1547176260116

db.collection.updateOne(查询条件,新对象)

db.collection.updateMany(查询条件,新对象)

db.collection.replaceOne()

删除文档

db.collection.remove()

db.collection.deleteOne()

db.collection.deleteMany()

db.collection.remove({})

db.collection.drop()

db.dropDatabase()

开发实际情况

查询操作符

$eq; $ne;$gt; $gte; $lt; $lte; greater than less than equal not equal
$in; Matches any of the values specified in an array.
$nin; Matches none of the values specified in an array.

db.numbers.find(num:{&gt:500})

db.numbers.find({num:{$gt:40,$lt:50}});

db.numbers.find().skip(integer).limit(integer);
db.emp.find({},{ename:1,_id:0,sal:1}); //只显示ename、sal,_id默认显示,不显示_id,

$or;db.emp.find({$or :[{sal:{$lt:1000}},{sal:{$gt:2500}}]})

4. 文档之间的关系

一对一

一对多

多对多

Mongoose 简介

Mongoose 的好处

2. 基本概念

新的对象

Schema(模式对象)

Model

Document

3. Mongoose 的使用

链接数据库

  1. 安装 Mongoose

    • npm i mongoose –save
  2. 引入 Mongoose

    • var mongoose = require(“mongoose”);
  3. 链接 MongoDB 数据库

    • mongoose.connect('mongodb://localhost/test'.{useMongoClient:true});
    • mongodb://地址: 端口号/数据库名
    • 如果端口号是默认端口号 27017 则可以省略
  1. 监听 MongoDB 的链接状态

    • 在 mongoose 对象中,有一个属性叫做 connection,该对象表示的是数据库的链接,通过监视该对象的状态可以监听数据库的断开与链接
    • mongoose.connection.once(“open”,function(){});
    • mongoose.connection.once(“close”,function(){});

创建 Shcema 对象

var stuSchema = new Schema({
  name:{type:String,required: true}
  age:Number,
  gender:{
    type:String,
    default:"female"
  },
  address:String
})

数据类型,必填,默认值

创建 Model 对象

创建 Doucument 对象

4. 增删改查(Model 方法)

Model.create(doc(s),[callback])

  1. doc(s),可以是一个文档对象,也可以是一个文档对象的数组或多个文档对象
  2. callback,可选的,当操作完成之后执行,返回 err 和插入的文档

Model.find(conditions, [projection], [options], [callback])

Model.findOne(conditions, [projection], [options], [callback])

Model.findById(id, [projection], [options], [callback])

Model.update(conditions,doc, [options], [callback])

Model.updateOne(conditions,doc, [options], [callback])

Model.updateMany(conditions,doc, [options], [callback])

  1. conditions: 查询条件

  2. doc:传入的是需要修改的属性

    • 有这个属性就修改 value,没有这个属性就添加这个属性,原本对象不会被改写
    • All top level update keys which are not atomic operation names are treated as set operations
    • 所有不是指定 set,这是为了防止重写文档对象,所以实验的结果是成立的
    • 传入的文档已经是对象形式了,不要多余的加一个括号,会被认为是参数设置
    • PostModel.update({_id:postInfo._id},postInfo,{new:true},function(err,post){}
  3. options: 配置参,

    • multi:true ,update 查多个
    • new:true,回调函数的参数是修改后的对象,想要在回调函数内部访问修改后的对象,一个是设置该选项,或者用 assign 合并,因为常常要对 oldDoc 进行判断
  4. callback: 回调函数

Model.replaceOne(conditions,doc, [options], [callback])

Model.remove(conditions, [callback])

Model.deleteOne(conditions, [callback])

Model.deleteMany(conditions, [callback]).

其他方法

Model.count(conditions, [callback])

5. Ducument 方法

[Model#save([options] [options.safe], [options.validateBeforeSave],[fn])

update(update,[options],[callback])

remove([callback])

get(path,[type])

set(path,value,[type])

equals(doc)

isNew

toJSON()

toObject()

6. Mongoose 模块化

连接数据库的模块

/*连接数据库*/
// 引入mongoose
const mongoose = require('mongoose')
// 连接指定数据库(URL只有数据库是变化的)
mongoose.connect('mongodb://localhost:27017/calender',{ useNewUrlParser: true })
// 获取连接对象
const conn = mongoose.connection
// 绑定连接完成的监听(用来提示连接成功)
conn.once('connected', () => {
  console.log('db connect success!')

定义 Schema 的模块

/* 定义出对应特定集合的Model并向外暴露*/
// 引入mongoose
const mongoose = require('mongoose')

const Schema = mongoose.Schema
// 定义userSchema(描述文档结构)
const userSchema = new Schema({
  events:{type:Array} //储存着用户创建的events的_id
})
// 定义Model(与集合对应, 可以操作集合)
const UserModel = mongoose.model('user', userSchema) // 集合为: users
// 向外暴露Model
exports.UserModel = UserModel