MongoDB 6 安装

区别于MongoDB 4版本,MongoDB 6安装文件不包含客户端shell 连接工具,以及相应的管理工具,
如mongoimport、mongoexport 等工具。如需安装mongodb服务器、shell客户端、
管理工具则需要分三个部分分别安装。喜欢绿色安装(不会由于疏漏 启动太多的服务),因此后续下载的安装文件都是压缩文件。

服务器安装

官方社区版下载地址

// 1. 解压压缩包
tar -zxvf mongodb-macos-x86_64-6.0.tgz// 2. 在主目录创建数据目录
sudo mkdir -p /usr/local/var/mongodb// 3. 创建主目录 日志文件目录
sudo mkdir -p /usr/local/var/log/mongodb// 4. 在主目录下的bin目录下执行
./mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork// 5. 指定配置文件启动
mongod --config /usr/local/etc/mongod.conf// 6. mongodb 启动默认绑定27017端口 绑定ip为127.0.0.1,即只允许本机访问,可以通过如下方式让其他机器访问
// 6.1 启动行添加参数 --bind_ip./mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --bind_ip 0.0.0.0 --fork//6.2 配置文件
net:bindIp: 0.0.0.0

客户端安装

官方客户端下载地址

// 下载解压后 在bin目录执行一下脚本
./mongosh --host 192.168.0.3

管理工具安装

提供数据导入、导出、系统监控等数据库运维管理工具。
官方下载地址

基本使用

数据库操作

// 显示数据库
test> show dbs
admin   40.00 KiB
config  60.00 KiB
local   72.00 KiB/*** 1. 创建/切换数据库 (数据库不存在时 直接创建并切换; 存在时 切换)* 2. 此时 需要注意 使用 show dbs 并不能显示出来 crm数据库的相关信息* 3. 在crm 数据库创建一个document,并插入一条记录 则立马显示数据库信息*/
test> use crm
switched to db crm //创建并切换数据库到 crm
crm> show dbs
admin   40.00 KiB
config  72.00 KiB
local   72.00 KiB// 在crm数据库中 执行以下脚本
db.movies.insertOne({title: "The Favourite",genres: [ "Drama", "History" ],runtime: 121,rated: "R",year: 2018,directors: [ "Yorgos Lanthimos" ],cast: [ "Olivia Colman", "Emma Stone", "Rachel Weisz" ],type: "movie"}
)// 执行 show dbs, 显示数据库信息
crm> show dbs
admin    40.00 KiB
config  108.00 KiB
crm       8.00 KiB
local    72.00 KiB//删除collection
db.collection.drop()

CRUD

Insert

单行插入

crm> db.movies.insertOne(
...   {
.....     title: "The Favourite",
.....     genres: [ "Drama", "History" ],
.....     runtime: 121,
.....     rated: "R",
.....     year: 2018,
.....     directors: [ "Yorgos Lanthimos" ],
.....     cast: [ "Olivia Colman", "Emma Stone", "Rachel Weisz" ],
.....     type: "movie"
.....   }
... )
{acknowledged: true,insertedId: ObjectId("63306a9cf34b5e8ce7249258")
}

多行插入

db.movies.insertMany([{title: "Jurassic World: Fallen Kingdom",genres: [ "Action", "Sci-Fi" ],runtime: 130,rated: "PG-13",year: 2018,directors: [ "J. A. Bayona" ],cast: [ "Chris Pratt", "Bryce Dallas Howard", "Rafe Spall" ],type: "movie"},{title: "Tag",genres: [ "Comedy", "Action" ],runtime: 105,rated: "R",year: 2018,directors: [ "Jeff Tomsic" ],cast: [ "Annabelle Wallis", "Jeremy Renner", "Jon Hamm" ],type: "movie"}
])

批量插入

/** 基本语法; 按照指定顺序执行多个操作* 1. operation 包含:insertOne、deleteOne、deleteMany、replaceOne、updateOne、updateMany* 2. writeConcern : 可选项,跟事务相关,后续单独讲* 3. ordered : 可选项 默认为true,服务端是否按顺序执行操作*/
db.collection.bulkWrite([ <operation 1>, <operation 2>, ... ],{writeConcern : <document>,ordered : <boolean>}
)// example 1 批量插入一条
db.movies.bulkWrite( [{ insertOne : { "document" : {title: "Jurassic World: Fallen Kingdom",genres: [ "Action", "Sci-Fi" ],runtime: 130,rated: "PG-13",year: 2018,directors: [ "J. A. Bayona" ],cast: [ "Chris Pratt", "Bryce Dallas Howard", "Rafe Spall" ],type: "movie"} } }
] )/*** 单行更新* 根据过滤条件 更新单个文档;如果匹配多条数据,则更新第一条数据即可*/
db.collection.bulkWrite( [{ updateOne :{"filter": <document>,"update": <document or pipeline>,            // Changed in 4.2"upsert": <boolean>,"collation": <document>,                     // Available starting in 3.4"arrayFilters": [ <filterdocument1>, ... ],  // Available starting in 3.6"hint": <document|string>                    // Available starting in 4.2.1}}
] )/*** 多行更新* 根据过滤条件 更新单个索引;如果匹配多条数据,则更新第一条数据即可*/
db.collection.bulkWrite( [{ updateOne :{"filter": <document>,"update": <document or pipeline>,            // Changed in 4.2"upsert": <boolean>,"collation": <document>,                     // Available starting in 3.4"arrayFilters": [ <filterdocument1>, ... ],  // Available starting in 3.6"hint": <document|string>                    // Available starting in 4.2.1}}
] )/*** 单文档替换* 根据过滤条件替换单个文档,如果匹配多行,则替换第一个*/
db.collection.bulkWrite([{ replaceOne :{"filter" : <document>,"replacement" : <document>,"upsert" : <boolean>,"collation": <document>,                    // Available starting in 3.4"hint": <document|string>                   // Available starting in 4.2.1}}
] )/*** 单文档删除* 根据过滤条件删除单个文档,如果匹配多行,则删除第一个*/
db.collection.bulkWrite([{ deleteOne : {"filter" : <document>,"collation" : <document>                   // Available starting in 3.4} }
] )/*** 多文档删除* 根据过滤条件删除所有符合条件文档*/
db.collection.bulkWrite([{ deleteMany: {"filter" : <document>,"collation" : <document>                    // Available starting in 3.4} }
] )// example2
db.pizzas.bulkWrite( [{ insertOne: { document: { _id: 3, type: "beef", size: "medium", price: 6 } } },{ insertOne: { document: { _id: 4, type: "sausage", size: "large", price: 10 } } },{ updateOne: {filter: { type: "cheese" },update: { $set: { price: 8 } }} },{ deleteOne: { filter: { type: "pepperoni"} } },{ replaceOne: {filter: { type: "vegan" },replacement: { type: "tofu", size: "small", price: 4 }} }] )//执行上面的脚本时,如果collection存在_id为4的文档,则报如下错误
writeErrors: [WriteError {err: {index: 1,code: 11000,errmsg: 'E11000 duplicate key error collection: test.pizzas index: _id_ dup key: { _id: 4 }',op: { _id: 4, type: 'sausage', size: 'large', price: 10 }}}
],
result: BulkWriteResult {result: {ok: 1,writeErrors: [WriteError {err: {index: 1,code: 11000,errmsg: 'E11000 duplicate key error collection: test.pizzas index: _id_ dup key: { _id: 4 }',op: { _id: 4, type: 'sausage', size: 'large', price: 10 }}}],writeConcernErrors: [],insertedIds: [ { index: 0, _id: 3 }, { index: 1, _id: 4 } ],nInserted: 1,nUpserted: 0,nMatched: 0,nModified: 0,nRemoved: 0,upserted: []}
}

Query

  1. 基本查询

    // 类似SQL中的 select * from table,查询所有数据
    db.movies.find()// 类似SQL中的 select * from table limit 2,限定返回数据
    db.movies.find().limit(2)// 类似SQL中的 select * from table limit 2,2,限定返回数据
    db.movies.find().skip(2).limit(2)// 类似SQL中的 select count(1) from table,查询总数
    db.movies.count()
    
  2. 指定条件

    // 类似SQL: SELECT * FROM table WHERE title = "Tag"
    db.movies.find( { "title": "Tag" } )// 范围查询 类似SQL: SELECT * FROM table WHERE rated in ("PG", "PG-13")
    db.movies.find( { rated: { $in: [ "PG", "PG-13" ] } } )// 逻辑比较 类似SQL: SELECT * FROM table WHERE countries = 'Mexico' and 'imdb.rating' >= 7
    db.movies.find( { countries: "Mexico", "imdb.rating": { $gte: 7 } } )// 逻辑比较 OR  ; 查找年份为2010 或者 ( "awards.wins" 大于等于5 genres == "Drama"  )
    db.movies.find( {year: 2010,$or: [ { "awards.wins": { $gte: 5 } }, { genres: "Drama" } ]
    } )// 结果返回 指定字段, 1表示显示字段。 类似SQL: SELECT _id FROM table WHERE rated in ("PG", "PG-13")
    db.movies.find( { rated: { $in: [ "PG", "PG-13" ] } },{_id:1} )
    // 显示结果
    [{ _id: ObjectId("63306e72f34b5e8ce724925a") },{ _id: ObjectId("63306e72f34b5e8ce724925c") },{ _id: ObjectId("63306e72f34b5e8ce724925e") },{ _id: ObjectId("63306e72f34b5e8ce7249260") },{ _id: ObjectId("63306e72f34b5e8ce7249262") }
    ]
    
  3. 高级查询-内嵌文档查询

    // 首先 插入测试数据 此时 size节点是一个JSON对象,即内嵌文档
    db.inventory.insertMany( [{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
    ]);// query1 内嵌文档数据匹配
    db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
    // 输出内容
    [{_id: ObjectId("633072d4f34b5e8ce7249264"),item: 'journal',qty: 25,size: { h: 14, w: 21, uom: 'cm' },status: 'A'}
    ]// query2 内部字段查询; 可以将外部/内部的字段 通过.号 连接起来
    db.inventory.find( { "size.uom": "in" } )
    // 输出内容
    [{_id: ObjectId("633072d4f34b5e8ce7249265"),item: 'notebook',qty: 50,size: { h: 8.5, w: 11, uom: 'in' },status: 'A'},{_id: ObjectId("633072d4f34b5e8ce7249266"),item: 'paper',qty: 100,size: { h: 8.5, w: 11, uom: 'in' },status: 'D'}
    ]// query3 逻辑比较
    db.inventory.find( { "size.h": { $lt: 15 } } )// query4 条件 AND
    db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )
    
  4. 高级查询-数组查询

    /** 1. 删除遗留测试数据* 2. 插入测试数据*/
    db.inventory.drop();
    db.inventory.insertMany([{ item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },{ item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },{ item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
    ]);// query1 数组匹配 (精准匹配 条件出现的内容、位置、条数一摸一样才能被查询出来)
    db.inventory.find( { tags: ["red", "blank"] } )// query2 模糊匹配 (只需要数组中出现内容即可被查询出来)
    db.inventory.find( { tags: { $all: ["red", "blank"] } } )// query3 单元素查询
    db.inventory.find( { tags: "red" } )// query4 元素比较, 只需要任一元素 大于 25 即被查出
    db.inventory.find( { dim_cm: { $gt: 25 } } )// query5 多条件查询 数组元素需要大于15 或者 小于20
    db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )// query6 多条件查询 数组元素需要大于 22 且 小于30
    db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )// query7 数组下标查询 (下标从0开始),第二个元素大于25
    db.inventory.find( { "dim_cm.1": { $gt: 25 } } )// query8 数组长度查询, 查询数组长度为3的document
    db.inventory.find( { "tags": { $size: 3 } } )
    
  5. 高级查询-数组内嵌文档查询

    /** 1. 删除遗留测试数据* 2. 插入测试数据*/
    db.inventory.drop();
    db.inventory.insertMany( [{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },{ item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },{ item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
    ]);// query1 根据数组内部文档查询
    db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )// query2 数组内嵌文档比较查询
    db.inventory.find( { 'instock.qty': { $lte: 20 } } )// query3 使用数组下标 比较查询
    db.inventory.find( { 'instock.0.qty': { $lte: 20 } } )// query4 数组匹配查询 (只要一个匹配就会被查询)
    db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )// query5 数组逻辑比较查询
    // 数组中的元素 > 10 and < 20; 一个满足就会被查询
    db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } )
    // 数组中的元素 > 10 or < 20; 一个满足就会被查询; 小细节希望大家注意
    db.inventory.find( { "instock.qty": { $gt: 10,  $lte: 20 } } )// query6 OR 关系; 只要数组中的数据满足其中一个条件即可
    db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )
    
  6. 高级查询-指定返回字段

    /** 1. 删除遗留测试数据* 2. 插入测试数据*/
    db.inventory.drop();
    db.inventory.insertMany( [{ item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },{ item: "notebook", status: "A",  size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },{ item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },{ item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },{ item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
    ]);// query1 查询状态为A的数据,返回所有字段
    db.inventory.find( { status: "A" } )// query2 mongodb 查询返回指定字段;_id 默认被返回
    db.inventory.find( { status: "A" }, { item: 1, status: 1 } )// query3 不返回_id
    db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )// query4 排除需要返回的字段
    db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )// query5 返回内嵌文档的指定字段
    db.inventory.find({ status: "A" },{ item: 1, status: 1, "size.uom": 1 }
    )// query6 排除内嵌文档中的字段
    db.inventory.find({ status: "A" },{ "size.uom": 0 }
    )// query7 返回数组中的指定字段
    db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )// query8 返回数组中最后一个元素
    db.inventory.find( { status: "A" }, { item: 1, status: 1, instock: { $slice: -1 } }
    
  7. 高级查询-null/缺失字段查询

    /** 1. 删除遗留测试数据* 2. 插入测试数据*/
    db.inventory.drop();
    db.inventory.insertMany( [{  "_id": 1 , "item": null  },{  "_id": 2 }
    ]);// query1 查询为null的字段 (当字段不存在时 以下查询条件也满足)
    db.inventory.find({item: null})// query2 只返回null的数据 ($type为10表示Null)
    db.inventory.find({"item": {$type : 10}})// query3 查询字段不存在的数据
    db.inventory.find({"item": {$exists: false}})// query4 查询字段存在 且不为null的数据
    db.inventory.find({"item": {"$ne": null, $exists: true}})
    

Update

// 单个更新
db.movies.updateOne( { title: "Tag" },
{$set: {plot: "One month every year, five highly competitive friends hit the ground running for a no-holds-barred game of tag"},$currentDate: { lastModified: true }
})// 批量更新
db.movies.updateMany({ security_deposit: { $lt: 100 } },{$set: { security_deposit: 100, minimum_nights: 1 }}
)// 替换
db.movies.replaceOne({ account_id: 371138 },{ account_id: 893421, limit: 5000, products: [ "Investment", "Brokerage" ] }
)

Delete

// 删除所有数据
db.movies.deleteMany({})// 指定条件删除
db.movies.deleteMany( { title: "Titanic" } )// 仅删除一个 根据匹配条件
db.movies.deleteOne( { cast: "Brad Pitt" } )

MongoDB 6 安装 基本操作相关推荐

  1. MongoDB的安装与使用

    MongoDB是一款NoSql数据库.NoSql数据库叫非关系型数据库,NoSql的全名Not only sql.是为了解决高并发.高可用.高可扩展,以及大数据存储等一系列问题而产生的数据库解决方案. ...

  2. 第一章 Redis基础(简介+下载和安装+基本操作)----黑马

    第一章 Redis基础(简介+下载和安装+基本操作) ----黑马 文章目录 第一章 Redis基础(简介+下载和安装+基本操作) ----黑马 学习目标: 1. Redis 简介 1.1 NoSQL ...

  3. mongodb的安装及主从复制

    mongodb的安装及主从复制 转载http://linuxme.blog.51cto.com/1850814/965184 一.mongodb安装 1.下载mongodblinux版本(注意32位和 ...

  4. 手把手教你 MongoDB 的安装与详细使用(二)

    上一篇文章练习了,MongoDB 的以下操作 安装 MongoDB 服务 连接 MongoDB MongoDB 创建数据库 MongoDB 删除数据库 MongoDB 插入文档 MongoDB 删除文 ...

  5. mongodb php linux,mongodb 及PHP的MongoDB 扩展安装

    Install MongoDB https://www.mongodb.org/downloads 第一种 通用二进制包安装 curl -O https://fastdl.mongodb.org/li ...

  6. MongoDB的安装及基本命令和pymongo的使用

    Mac中MongoDB的安装以及基本命令和pymongo的使用 一. NoSQL简介 1.NoSQL介绍 NoSQL全名为Not Only SQL, 指的是非关系型数据库, 在现代的计算系统上每天网络 ...

  7. Windows下MongoDB的安装与设置MongoDB服务

    Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐.Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB ...

  8. mac下MongoDB数据库安装

    MongoDB数据库安装 下载安装 https://www.mongodb.com/ 打开官网,找到适合自己平台的包,下载解压即可 解压安装后,需要创建一个空的文件夹,用来存放数据,(我在bin的同级 ...

  9. Mongodb的安装部署

    Mongodb的安装部署 一.环境介绍 二.配置mongodb的yum源 三.安装mongodb 三.启动mongodb 1.mongodb启动 2.查看mongodb的状态 3.查看监听端口 四.进 ...

  10. Mongodb学习(安装篇): 在centos下的安装

    安装篇 ###下载解压文件 [root@192 lamp]# wget http://fastdl.mongodb.org/linux/mongodb-linux-i686- 2.2.2.tgz ## ...

最新文章

  1. 算法-----三数之和等于0
  2. 2/3 常用符号:格式说明符
  3. How is ngModelController initialized
  4. Mysql 启动报错解析:Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/dat
  5. iOS 设置不同环境对应不同icon
  6. h5 做app时和原生交互的小常识。
  7. 练习:----计算阶乘按钮
  8. 使用loadrunner录制winsock协议的程序(原创)
  9. 简道云、氚云、明道云们更讨中小企业欢心?
  10. epr系统服务器配置,erp系统云服务器配置要求
  11. 三菱FX5U系列PLC电池安装方法以及GX Works3内相关参数设置
  12. 锐起无盘2046 XP 教程(适合新手)
  13. 13天搞定java_[Java基础] 魔乐科技教你13天搞定JAVA系列高端教程 视频教程 教学视频...
  14. 让你思维洞开的5个头脑风暴工具
  15. 梦恋千古解忧愁,风恋落花独悠悠
  16. MyBatis学习从练气到化虚
  17. webbrowser 百度列表点击_百度OCR和百度翻译api申请教程
  18. 信号逻辑电平标准详解
  19. mysql crud操作_golang_crud
  20. 基于朴素贝叶斯的扑克牌花色识别

热门文章

  1. linux从新建命令窗口快捷键,tmux 常用命令及快捷键
  2. 《关键信息基础设施安全保护条例》正式发布
  3. DNS相关知识及其配置
  4. 为什么选择浙工大计算机专业,研途生活 | 亲爱的你,当初是为什么选择浙工大...
  5. Error: Authentication fai1ed.解决办法
  6. css动画小案例(太阳地球月球运动轨迹)
  7. 记录对接京东宙斯API -- 同步订单信息到自身系统
  8. Java字符串(超超超详细)
  9. stm32 移植 FreeRTOS
  10. 100多个常用 API 接口整理大全