MongoDB

0x01 概述

  • MongoDB 是一个基于分布式文件存储的开源数据库,由 C++ 语言编写,提供了一个可扩展的高性能数据存储解决方案

  • MongoDB 是一个文档型数据库,属于非关系型数据库(NoSQL)的一种,其数据是以文档的形式来存储的

    • 文档(Document)在 MongoDB 中是一个非常重要的概念,类似 MySQL 中的“行”,数据格式是 Binary JSON(简称 BSON)
    • 数据库是由一个个的集合组成的,类似 MySQL 中的“表”,包括多个文档

    MongoDB 与 MySQL 的对比

    MongoDB MySQL
    数据库(database) 数据库(database)
    集合(collection) 表(table)
    文档(document) 行(row)
    字段(field) 列(column)
    索引(index) 索引(index)
    _id 主键
    $lookup join
    $group group by

0x02 安装配置

(1)Windows

  • 官网下载安装包进行安装

(2)Mac

  1. 方法一:同 Windows 下载安装包并安装

  2. 方法二:在终端执行以下命令

    brew install mongodb-atlas
    atlas setup
    

(3)VSCode 插件

  • 搜索“MongoDB for VS Code”并安装
  • 创建连接并设置地址:mongodb://localhost:27017

(4)官方工具

a. GUI 工具

官网下载

b. MongoShell

官网下载

0x03 常用命令

在 Mongo Shell 中进行操作

  • help:查看帮助
  • cls:清屏

(1)创建数据库 / 集合

  • show databases/show dbs:查看当前数据库
    • 当真正开始插入数据时,数据库才会被创建
  • use [database_name]:切换数据库
  • db.[collection_name]:创建集合
    • 例:创建集合 users:db.user
    • 数据保存在集合中,增删改查时需要指定集合,以下内容以对 users 集合进行操作为例

(2)插入数据

  • db.users.insertOne({name: "Alex", age: 18}):插入一条数据到指定集合中

    • 执行该插入命令后,MongoDB 会返回以下内容:

      {
          acknowledged: true,
          insertedId: ObjectId("xxx")
      }
      

      其中,acknowledged 表示是否插入成功,insertedId 表示数据的 id(此 id 可看作 MySQL 中的主键)

  • db.users.insertMany([{name: "Bob"}, {name: "Clarlie"}]):插入一条数据到指定集合中

(3)查询数据

  • db.users.find():查看指定集合中的全部数据
    • db.users.find().limit(x):限制查询返回结果的数量为 x
    • db.users.find().sort({_id: 1, age: -1}):对查询返回结果按_id字段和age字段进行排序,1表示升序,-1表示降序
    • db.users.find().sort({age: 1}).skip(1):跳过查询返回的第一条结果
      • 一般 skip() 常与 sort() 配合使用,从而实现分页的效果
  • db.users.find({age: 18}):条件查询,查询 age 字段值为 18 的结果
    • db.users.find({age: 18}, {name: 1, _id: 0}):查询 age 字段值为 18 的结果并仅返回对应的 name 字段值
    • db.users.find({age: 18}, {name: 0}):查询 age 字段值为 18 的结果并返回除 name 之外其他所有字段值
  • db.users.find({age: {$gt: 18}}):比较查询,查询 age 字段值大于 18 的结果
    • $eq:等于
    • $gt:大于
    • $gte:大于等于
    • $lt:小于
    • $lte:小于等于
  • db.users.find({age: {$in: [18, 20]}}):多条件查询,查询 age 字段值为 18 或 20 的结果
    • $nin:表示 not in 的意思
  • db.users.find({sex: {$exists: true}}):存在性查询,查询存在 sex 字段的文档
    • true=1false=0
    • 仅查询字段是否存在,不能查询字段值是否存在
  • db.users.find({age: {$and: [{$gte: 18}, {$lte: 20}]}}):逻辑查询,查询 age 字段值大于等于 18 小于等于 20 的结果
    • $and:逻辑与
    • $or:逻辑或
    • $not:逻辑非
  • db.users.find({name: {$regex: /张/}}):正则查询,查询 name 字段含“张”的结果
  • db.users.findOne({age: 18}):查询满足条件的一条数据

(4)更新数据

  • db.users.updateOne({age: 1}, {$set: {sex: null}}):更新满足条件的一条数据
  • db.users.updateMany():更新满足条件的多条数据

(5)删除数据

  • db.users.deleteOne({age: 1}):删除满足条件的一条数据
  • db.users.deleteMany():删除,满足条件的多条数据

(6)聚合函数

  • db.users.countDocuments():统计文档数量,在括号中可传入条件,同 find()

-End-

posted @ 2023-09-08 20:25  SRIGT  阅读(19)  评论(0编辑  收藏  举报