MongoDB数据库基础

一、认识MongoDB

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
官网:https://www.mongodb.com/

1、基本概念

  • 数据库(database)
    数据库是一个仓库,在仓库中可以存放集合。
  • 集合(collection)
    集合类似于数组,在集合中可以存放文档。
  • 文档(document)
    文档是数据库中的最小单位,存储和操作的内容都是文档。

注意:数据库和集合不需要手动创建,创建文档时,如果文档所在的集合或数据库不存在就会自动创建数据库和集合。

2、基本指令

show dbs  等同于  show databases        #显示当前所有的数据库
show collections                       #显示数据库中所有的集合
use 数据库名                            #进入到指定的数据库中
db                                     #显示当前所在的数据库

3、文档的增删改查

1、插入文档(_id属性默认自动添加)

db.collection.insert()               #向集合中插入一个或多个文档
db.collection.insertOne()            #插入一个文档对象
db.collection.insertMany()           #插入多个文档对象

2、查询文档

db.collection.find()                 #查询集合中所有符合条件的文档
db.collection.findOne()              #查询集合中符合条件的第一个文档
db.collection.find({}).count         #查询所有结果的数量

3、修改文档

db.collection.update(查询条件,新对象)  #依据查询条件替换旧对象,默认只修改一个
db.collection.updateOne()            #修改一个符合条件的文档
db.collection.updateMany()           #同时修改多个符合条件的文档
db.collection.replaceOne()           #替换一个文档
比较操作符
   $eq         匹配字段值等于指定值的文档
   $gt         匹配字段值大于指定值的文档
   $gte        匹配字段值大于等于指定值的文档
   $lt         匹配字段值小于指定值的文档
   $lte        匹配字段值小于等于指定值的文档
   $ne         匹配字段值不等于指定值的文档,包括没有这个字段的文档
   $in         匹配字段值等于指定数组中的任何值
   $nin        字段值不在指定数组或者不存在
   
逻辑操作符
   $or         文档至少满足其中的一个表达式
   $and        文档同时满足这些表达式
   $not        字段值不匹配表达式或者字段值不存在
   $nor        字段值不匹配所有的表达式的文档,包括那些不包含这些字段的文档

元素操作符
   $exists     <boolean> 等于true时,字段存在,包括字段值为null的文档<boolean> 等于false时,字段不存在
   $type       匹配字段值为指定数据类型的文档

评估操作符
   $mod        匹配字段值被除有指定的余数的文档
   $regex      正则表达式可以匹配到的文档
   $text       针对创建了全文索引的字段进行文本搜索
   $where      可以通过js表达式或js函数来查询文档

数组操作符
   $all        字段值是包含所有指定元素的数组的文档
   $elemMatch  数组字段至少一个元素满足所有指定查询条件的文档
   $size       匹配数组字段元素个数等于指定数量的文档

投影操作符
   $ (projection)           限定查询结果中指定数组字段返回满足条件的第一个元素 
   $elemMatch (projection)  限定查询结果中指定数组字段返回满足条件的第一个元素
   $slice (projection)      控制指定数组字段返回元素个数

更新操作符
   $inc        给一个字段增加指定值
   $mul
   $rename
   $setOnInsert   upsert为true时,有插入文档操作时插入指定字段值
   $set        设置指定字段
   $unset      删除指定字段
   $min        指定值小于当前值则更新为指定值 
   $max        指定值大于当前值则更新为指定值
   $currentDate设置字段值为当前日期指定值为true设置为当前日期, 或者{ $type: “timestamp” }或{ $type: “date” }的形式”timestamp”和”date”必须是小写的
   $           更新指定数组的第一个元素
   $addToSet   数组字段增加一个值
   $pop        删除数组字段中的第一个或最后一个元素 
   $pullAll    删除数组字段中所有指定值,如果指定值为数组,则删除匹配数组内的元素
   $pull       符合条件的值将被删除
   $pushAll    向数组中追加多个指定值
   $push       向数组中追加值
   $each       用于$addToSet添加多个值到数组中
   $slice      限定$push操作时数组元素的个数,必须和$each一起使用
   $sort       与$each一起使用
   $position   与$each一起使用,<num>从0开始的索引值

聚合管道操作符
   $project    管道中字段的增加、删除和重命名
   $match
   $limit
   $skip
   $unwind     文档按照数组字段进行拆分
   $group
   $sort
   $lookup     两个集合之间的关联
   $count

4、删除文档

db.collection.remove()              #删除一个或多个,第二个参数设置为true,则只会删除一个
db.collection.deleteOne()           #删除一个文档
db.collection.deleteMany()          #删除多个文档

db.collection.drop()                #删除集合
db.dropDatabase()                   #删除数据库

4、文档间的关系、

  • 一对一
  • 一对多或多对一
  • 多对多

二、认识Mongoose

Mongoose官网:http://www.mongoosejs.net/
它是一个可以通过Node来操作MongoDB的模块。

好处:

  • 可以为文档创建一个模式结构(Schema)
  • 可以对模型中的对象/文档进行验证
  • 数据可以通过类型转换为对象模型
  • 可以使用中间件来应用业务逻辑挂钩
  • 比Node原生的MongoDB驱动更容易

基本概念:

  • Schema(模式对象):定义了数据库中的文档结构
  • Modul:作为集合中的所有文档的表示,相当于MongoDB数据库中的集合collection
  • Document:表示集合中的具体文档

Mongoose的使用

1、下载安装Mongoose

npm i mongoose --save

2、在项目中引入mongoose

var mongoose = require('mongoose');

3、连接MongoDB数据库(默认端口号:27017)

mongoose.connect('mongodb://user:pass@localhost:port/database', { autoIndex: false });

//数据库连接成功的事件
mongoose.connection.once("open",function(){});
//数据库连接失败的事件
mongoose.connection.once("close",function(){});

4、断开数据库连接

mongoose.disconnect

5、定义一个schema

var mongoose = require('mongoose');
  var Schema = mongoose.Schema;

  var blogSchema = new Schema({
    title:  String,
    author: String,
    body:   String,
    comments: [{ body: String, date: Date }],
    date: { type: Date, default: Date.now },
    hidden: Boolean,
    meta: {
      votes: Number,
      favs:  Number
    }
  });

6、创建一个model

var Blog = mongoose.model('Blog', blogSchema);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一条代码鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值