MongoDB

  • 1) Mongoose
  • 2) 插入文档
  • 3) 字段类型
  • 4) 字段值验证
  • 5) CRUD
    • 1) 增加
    • 2) 删除
    • 3) 更新
    • 4) 查询
  • 6) 条件控制
    • 1) 运算符
    • 2) 逻辑运算
    • 3) 正则匹配
  • 7) 个性化读取
    • 1) 字段筛选
    • 2) 数据排序
    • 3) 数据截取

1) Mongoose

介绍

Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/

作用

方便使用代码操作 mongodb 数据库

使用流程

// 导入mongooseconst mongoose = require("mongoose");// 连接 mongodbmongoose.connect('mongodb://127.0.0.1:27017/bilibili');// 设置回调mongoose.connection.on("open", () => {// 设置连接成功的回调console.log("连接成功");});mongoose.connection.on("error", () => {// 设置连接错误的回调console.log("连接失败");});mongoose.connection.on("close", () => {// 设置连接关闭的回调console.log("连接关闭");});// 关闭连接setTimeout(() => {mongoose.disconnect();}, 2000);

2) 插入文档

// 导入mongooseconst mongoose = require("mongoose");mongoose.set('strictQuery', false);// 连接 mongodbmongoose.connect('mongodb://127.0.0.1:27017/bilibili');// 设置回调mongoose.connection.once("open", () => {// 创建文档的结构对象let BookSchema = new mongoose.Schema({name: String,author: String,price: Number});// 创建模型对象let BookModel = mongoose.model('books', BookSchema);// 新增BookModel.create({name: "西游记",author: "吴承恩",price: 19.9}, (err,data)=>{if (err) {console.log(err);return;}console.log(data);mongoose.disconnect();});});mongoose.connection.on("error", () => {// 设置连接错误的回调console.log("连接失败");});mongoose.connection.on("close", () => {// 设置连接关闭的回调console.log("连接关闭");});

3) 字段类型

文档结构可选的常用字段类型列表

类型描述
String字符串
Number数字
Boolean布尔值
Array数组,也可以使用[]来标识
Date日期
BufferBuffer 对象
Mixed任意类型,需要使用 mongoose.Schema.Types.Mixed 指定
ObjectId对象 ID,需要使用 mongoose.Schema.Types.ObjectId 指定
Decimal128高精度数字,需要使用 mongoose.Schema.Types.Decimal128 指定

4) 字段值验证

Mongoose 有一些内建验证器,可以对字段值进行验证

必填项

title: {type: String,required: true // 设置必填项},

默认值

author: {type: String,default: '匿名' //默认值},

枚举值

gender: {type: String,enum: ['男','女'] //设置的值必须是数组中的},

唯一值 (主键)

username: {type: String,unique: true},

unique 需要 重建集合 才能有效果

5) CRUD

数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(read)

1) 增加

插入一条

SongModel.create({title:'给我一首歌的时间',author: 'Jay'}, function(err, data){//错误console.log(err);//插入后的数据对象console.log(data);});

批量插入

PhoneModel.insertMany([{brand:'华为',color:'灰色',price:2399,tags:['电量大','屏幕大','信号好']},{brand:'小米',color:'白色',price:2099,tags:['电量大','屏幕大','信号好']}],(err,data)=>{if(err) throw err;console.log('写入成功');mongoose.connection.close();})

2) 删除

删除一条数据

BookModel.deleteOne({_id: "65c60c85df92ad81ab74d4a8"}, (err, data) => {// 判断if (err) {console.log("删除失败~~");return;}console.log(data);});

批量删除

BookModel.deleteMany({is_hot: false}, (err, data) => {if (err) {console.log("删除失败~~");return;}console.log(data);});

3) 更新

更新一条

BookModel.updateOne({name: "红楼梦"}, {price: 9.9}, (err, data) => {if (err) {console.log(err);return;}console.log(data);});

批量更新

BookModel.updateMany({author: "余华"}, {is_hot: false}, (err, data) => {if (err) {console.log(err);return;}console.log(data);});

4) 查询

查询单条数据

BookModel.findOne({name: "狂飙"}, (err, data) => {if (err) {console.log(err);}console.log(data);});

根据id查询

BookModel.findById({_id: "65c60c85df92ad81ab74d4b9"}, (err, data) => {if (err) {console.log(err);}console.log(data);});

批量查询 (条件可以不添加则自动获取所有)

BookModel.find({author: "余华"}, (err, data) => {if (err) {console.log(err);}console.log(data);});

6) 条件控制

1) 运算符

在 mongodb 不能 > = <= !== 等运算符,需要使用替代符号

  • > 使用 $gt

  • < 使用 $lt

  • >= 使用 $gte

  • <= 使用 $lte

  • !== 使用 $ne

db.students.find({id: {$gt: 3}}); id号比3大的所有的记录

2) 逻辑运算

$or 逻辑或的情况

db.students.find({$or: [{age:18},{age:24}]});

$and 逻辑与的情况

db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});

3) 正则匹配

条件中可以直接使用 JS 的正则语法,通过正则可以进行模糊查询

db.students.find({name://});
db.students.find({name: new RegExp('刘')});

7) 个性化读取

1) 字段筛选

//0:不要的字段//1:要的字段SongModel.find().select({_id:0,title:1}).exec(function(err,data){if(err) throw err;console.log(data);mongoose.connection.close();});

2) 数据排序

//sort 排序//1:升序//-1:倒序SongModel.find().sort({hot:1}).exec(function(err,data){if(err) throw err;console.log(data);mongoose.connection.close();});

3) 数据截取

//skip 跳过 limit 限定SongModel.find().skip(10).limit(10).exec(function(err,data){if(err) throw err;console.log(data);mongoose.connection.close();});