MongoDB

2023-05-16

MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储
解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库
的,它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似
关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
官网:https://www.mongodb.com
通过docker安装MongoDB
#拉取镜像
docker pull mongo:4.0.3
#创建容器
docker create --name mongodb -p 27017:27017 -v /data/mongodb:/data/db mongo:4.0.3
#启动容器
docker start mongodb
#进入容器
docker exec -it mongodb /bin/bash
#使用MongoDB客户端进行操作
mongo

show dbs #查询所有的数据库
admin 0.000GB
config 0.000GB
local 0.000GB
视图视图iiMongoDB基本操作
为了更好的理解,下面与SQL中的概念进行对比
视图iii数据库以及表的操作
#查看所有的数据库
show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
#通过use关键字切换数据库
use admin
switched to db admin
#创建数据库
#说明:在MongoDB中,数据库是自动创建的,通过use切换到新数据库中,进行插入数据即可自动创建数据库
use testdb
switched to db testdb
show dbs #并没有创建数据库
admin 0.000GB
config 0.000GB
local 0.000GB
db.user.insert({id:1,name:‘zhangsan’}) #插入数据
WriteResult({ “nInserted” : 1 })
show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
testdb 0.000GB #数据库自动创建
#查看表
show tables
user
show collections
user

#删除集合(表)

db.user.drop()
true #如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。
#删除数据库
use testdb #先切换到要删除的数据中
switched to db testdb
db.dropDatabase() #删除数据库
{ “dropped” : “testdb”,“ok” : 1 }
show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
视图四新增数据
#插入数据
#语法:db.COLLECTION_NAME.insert(document)
db.user.insert({id:1,username:‘zhangsan’,age:20})
WriteResult({ “nInserted” : 1 })
db.user.save({id:2,username:‘lisi’,age:25})
WriteResult({ “nInserted” : 1 })
db.user.find() #查询数据
{ “_id” : ObjectId(“5c08c0024b318926e0c1f6dc”),“id” : 1,“username” : “zhangsan”,“age” : 20 }
{ “_id” : ObjectId(“5c08c0134b318926e0c1f6dd”),“id” : 2,“username” : “lisi”,“age” : 25 }

视频5更新数据
update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update(
,
,
[
upsert: ,
multi: ,
writeConcern:
]
)
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如 inc…)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是
false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条
记录全部更新。
writeConcern :可选,抛出异常的级别。

db.user.find()
{ “_id” : ObjectId(“5c08c0024b318926e0c1f6dc”),“id” : 1,“username” : “zhangsan”,“age” : 20 }
{ “_id” : ObjectId(“5c08c0134b318926e0c1f6dd”),“id” : 2,“username” : “lisi”,“age” : 25 }
db.user.update({id:1},{KaTeX parse error: Expected 'EOF', got '}' at position 13: set:{age:22}}̲) #更新数据 WriteRe…set:{sex:1}}) #更新数据
db.user.find()
{ “_id” : ObjectId(“5c08c0024b318926e0c1f6dc”),“age” : 25 }
{ “_id” : ObjectId(“5c08c0134b318926e0c1f6dd”),“id” : 2,“username” : “lisi”,“age” : 25,“sex” : 1 }
#更新不存在的数据,默认不会新增数据
db.user.update({id:3},{KaTeX parse error: Expected 'EOF', got '}' at position 12: set:{sex:1}}̲) WriteResult({…set:{sex:1}},true)
WriteResult({“nMatched” : 0,“nUpserted” : 1,“nModified” : 0,"_id" : ObjectId(“5c08cb281418d073246bc642”)})
db.user.find()
{ “_id” : ObjectId(“5c08c0024b318926e0c1f6dc”),“age” : 25 }
{ “_id” : ObjectId(“5c08c0134b318926e0c1f6dd”),“id” : 2,“username” : “lisi”,“age” : 25,“sex” : 1 }
{ “_id” : ObjectId(“5c08cb281418d073246bc642”),“id” : 3,“sex” : 1 }

删除数据
通过remove()方法进行删除数据,语法如下:
db.collection.remove(
,
{
justOne: ,
writeConcern:
}
)
参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删
除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。
实例:

db.user.remove({age:25})
WriteResult({ “nRemoved” : 2 }) #删除了2条数据
#插入4条测试数据
db.user.insert({id:1,username:‘zhangsan’,age:20})
db.user.insert({id:2,username:‘lisi’,age:21})
db.user.insert({id:3,username:‘wangwu’,age:22})
db.user.insert({id:4,username:‘zhaoliu’,age:22})
db.user.remove({age:22},true)
WriteResult({ “nRemoved” : 1 }) #删除了1条数据
#删除所有数据
db.user.remove({})
#说明:为了简化操作,官方推荐使用deleteOne()与deleteMany()进行删除数据操作。
db.user.deleteOne({id:1})
db.user.deleteMany({}) #删除所有数据

查询数据
MongoDB 查询数据的语法格式如下:
db.user.find([query],[fields])

query :可选,使用查询操作符指定查询条件
fields :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.col.find().pretty()
pretty() 方法以格式化的方式来显示所有文档。
条件查询:
示图实例:
#插入测试数据

db.user.insert({id:1,username:‘zhangsan’,age:20})
db.user.insert({id:2,username:‘lisi’,age:21})
db.user.insert({id:3,username:‘wangwu’,age:22})
db.user.insert({id:4,username:‘zhaoliu’,age:22})

db.user.find() #查询全部数据
db.user.find({},{id:1,username:1}) #只查询id与username字段
db.user.find().count() #查询数据条数
db.user.find({id:1}) #查询id为1的数据
db.user.find({age:{KaTeX parse error: Expected 'EOF', got '}' at position 7: lte:21}̲}) #查询小于等于21的数据…lte:21}, id:{KaTeX parse error: Expected 'EOF', got '}' at position 6: gte:2}̲}) #and查询,age小于…or:[{id:1},{id:2}]}) #查询id=1 or id=2

#分页查询:Skip()跳过几条,limit()查询条数
db.user.find().limit(2).skip(1) #跳过1条数据,查询2条数据
db.user.find().sort({id:-1}) #按照age倒序排序,-1为倒序,1为正序

索引
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取
那些符合查询条件的记录。
这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站
的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排
序的一种结构
#查看索引

db.user.getIndexes()
[
{
“v” : 2,
“key” : {"_id" : 1
},
“name” : “id”,
“ns” : “testdb.user”
}
]
#说明:1表示升序创建索引,-1表示降序创建索引。
#创建索引
db.user.createIndex({‘age’:1})
{
“createdCollectionAutomatically” : false,
“numIndexesBefore” : 1,
“numIndexesAfter” : 2,
“ok” : 1
}
#删除索引
db.user.dropIndex(“age_1”)
#或者,删除除了_id之外的索引
db.user.dropIndexes()
#创建联合索引
db.user.createIndex({‘age’:1,‘id’:-1})
#查看索引大小,单位:字节
db.user.totalIndexSize()
执行计划
MongoDB 查询分析可以确保我们建议的索引是否有效,是查询语句性能分析的重要工具。

#插入1000条数据
for(var i=1;i<1000;i++)db.user.insert({id:100+i,username:‘name_’+i,age:10+i})
#查看执行计划

db.user.find({age:{KaTeX parse error: Expected 'EOF', got '}' at position 7: gt:100}̲,id:{lt:200}}).explain()
{
“queryPlanner” : {
“plannerVersion” : 1,
“namespace” : “testdb.user”
,
“indexFilterSet” : false,
“parsedQuery” : {
KaTeX parse error: Expected '}', got 'EOF' at end of input: … "id" : { "lt” : 200
}
},
{
“age” : {
KaTeX parse error: Expected 'EOF', got '}' at position 14: gt" : 100 }̲ } ] }, "winni…eq” : “zhangsan”
}
},
“winningPlan” : {
“stage” : “COLLSCAN”, #全表扫描
“filter” : {
“username” : {
“$eq” : “zhangsan”
}
},
“direction” : “forward”
},
“rejectedPlans” : [ ]
},
“serverInfo” : {
“host” : “c493d5ff750a”,
“port” : 27017,
“version” : “4.0.3”,
“gitVersion” : “7ea530946fa7880364d88c8d8b6026bbc9ffa48c”
},
“ok” : 1
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 的相关文章

  • mongodump“失败:错误选项:只能将单个集合转储到标准输出”

    mongodump out 不起作用 它给了我这条消息 失败 错误的选项 只能将单个集合转储到标准输出 会发生什么 因此 例外是不言自明的 如果您使用 out 它只能在标准输出上显示单个集合 所以我想知道你想达到什么目标 如果你想输出一个特
  • 迁移后Mongodb数据文件变小

    在我的第一台服务器上我得到 root prod du hs var lib mongodb 909G var lib mongodb 迁移后this带有 mongodump mongorestore 的数据库 在我的第二台服务器上我得到 r
  • Mongodb:$HINT 的性能影响

    我有一个使用复合索引并在 id 上排序的查询 复合索引在索引末尾有 id 它工作正常 直到我添加 gt我的查询的子句 IE 初始查询 db colletion find field1 blabla field2 blabla sort id
  • MongoDB + Neo4J vs OrientDB vs ArangoDB [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前正处于 MMO 浏览器游戏的设计阶段 游戏将包括一些实时位置的图块地图 因此每个单元格的图块数据 和通用世界地图 我更喜欢使用 Mongo
  • MongoRuntimeError:连接池已关闭

    我看到我的猫鼬池在插入数据之前似乎已关闭 因为在调用云集群中的猫鼬数据库时出现此错误 MongoRuntimeError Connection pool closed 但我正在等待所有的电话 所以我不确定为什么会看到这个问题 也许这与我定义
  • 如何使用 java 执行此 MongoDB 查询?

    我必须写一个简单的MongoDB查询使用java但我做不到 mongo 查询如下所示 db yourCollection find where this startDate lt this endDate 我必须使用以下命令编写上述查询Qu
  • 如何在docker compose中运行mongodb副本集

    我尝试在我的 Mac 中使用 mongodb community 在本地运行 mongodb 副本集MongoDB 文档 https docs mongodb com manual tutorial convert standalone t
  • 在节点中使用mongoosejs更新多条记录

    我在使用 mongoosejs 和 Node js 更新多个记录时遇到问题 由于某种原因 即使有多个匹配 我也只更新一条记录 我还注意到回调在 update 之后不会触发 我没有收到任何错误消息 这里发生了什么 Page find stat
  • MongoDB 删除 MapReduce 集合

    由于客户端代码中的错误 mongodb 创建了许多 mr mapreduce 集合 如何将它们全部删除 可能通过掩码 我在交互式 shell 中运行脚本 function f var names db getCollectionNames
  • Mongodb聚合框架:$group是否使用索引?

    我正在尝试使用聚合框架 match and group阶段 做 group阶段使用索引数据 我正在使用最新的可用 mongodb 版本 2 5 4 group不使用索引数据 来自 mongoDBdocs http docs mongodb
  • MongoDB:如何使用单个命令更新多个文档?

    我惊讶地发现以下示例代码仅更新单个文档 gt db test save id 1 foo bar gt db test save id 2 foo bar gt db test update foo bar set test success
  • Windows 7 机器上的 MongoDB:无法建立连接

    在 Windows 7 机器上使用 mongod exe 启动 Mongo 后 我尝试启动 mongo shell 但失败并出现以下错误 无法连接到 127 0 0 1 27017 原因 errno 10061 否 由于目标机器主动拒绝而无
  • MacOS 每秒唤醒次数错误

    构建 Rails 应用程序 ruby 2 4 0p0 Rails 5 1 4 并使用我的 Macbook Air MacOS High Sierra 10 13 2 进行本地测试 我不断遇到此问题 过去 241 秒内有 45001 次唤醒
  • Mongodb 通过查询和分组查找

    简单收集 id 123 name FooBar zone Bas id 456 name Alice zone Bas id 789 name FooBar zone Bas 首先 我构建一个查询来按名称查找所有元素 db collecti
  • 如何使用 pymongo 在 mongodb 中查询日期?

    我试图在 mongodb 中执行查询日期 但结果始终为空 我的查询如下 in the begin code def init self self now datetime now self db conexaoMongo self hora
  • Mongodb更新很多

    我正在使用express js 和 npm 模块 mongodb 进行开发 并以 mongodb 作为数据库 我有两个集合 即 用户 和 活动 一个用户可能有数千个活动 首先 我将用户的 id 姓名和图片 url 存储到 关系的活动文件 请
  • PHP 中的 MongoDB - 如何将项目插入集合中的数组中?

    这必须很容易 但我似乎无法弄清楚 假设我有一个集合users这是集合中的第一项 id ObjectId 4d8653c027d02a6437bc89ca name Oscar Godson email email protected cdn
  • Mongodump之后,调用MongoRestore挂起

    我们正在尝试在相对较小的数据库上做一个简单的 MongoDump 我们的步骤很简单 export 从目标机器上删除现有数据库 在目标机器上导入 MongoDump 完美执行 mongodump out root mongo prod DB
  • 使用 Tweepy 获取推文时出错

    我有一个用于获取推文的 Python 脚本 在脚本中我使用该库 Tweepy 我使用有效的身份验证参数 运行此脚本后 一些推文存储在我的 MongoDB 中 有些则被 if 语句拒绝 但我仍然收到错误 requests packages u
  • Mongoose 独特的验证不起作用。保存重复条目

    我正在开发一个 NodeJS 应用程序 其中express是框架 MongoDB是数据库 我正在使用猫鼬插件 我有一个父母模型 我已经添加了独特 真实到场 mobile 但是每当我添加相同的手机号码时 唯一性验证就会失败 除了保存重复的文档

随机推荐

  • 基于UCOSIII+机智云的远程空调遥控器

    一年前 xff0c 我通过师兄的介绍知道了机智云这家创业公司 xff0c 后来 xff0c 他们的经理来我们学校开了一次宣讲会 xff0c 然后我就以个人开发者的名义申请了他们家的GoKit2代开发板 xff0c 开始对这家公司有一定的关注
  • VMware Workstation12安装Ubuntu和VMware Tools教程

    之前我通过百度经验上的过程来安装Ubuntu16 xff0c 但是每次安装的时候没有什么问题 xff0c 就是安装好了Tools xff0c 也设置好了共享文件夹 xff0c 但是在路径 xff1a mnt hgfs 下每次都找不到共享文件
  • IIC上拉电阻的选择

    上周项目评审的时候 xff0c 评审部门问了我一个问题 xff1a 为什么单片机内部有上拉电阻 xff0c 你们还要用外部的上拉电阻 xff1f 我的答复如下 xff1a 上拉电阻的选取要考虑上限值和下限值这两点 xff1a 上限值的最大限
  • 手写RTOS-创建工程

    今天开始我手写RTOS的第一步 xff0c 创建一个工程 这个工程要能够在MDK环境中能够进行编译和仿真 xff0c 不用借助任何的开发板和仿真器 xff0c 完全基于Cotex M3内核进行实验 现在我们开始创建这一个工程 xff0c 首
  • STM8S之TIM2_CH1输出不了PWM波解决办法

    最近由于项目需要 xff0c 用到STM8S103F3P6 xff0c 开发方式采用库函数方式开发 xff0c 编译环境为ST Visual Develop 43 Cosmic CxSTM8 32K 4 3 4 初始化PWM的程序如下 xf
  • 陀螺仪和加速度计互补滤波的一些推导

    1 首先 xff0c 简单介绍一下加速度计和陀螺仪的一些特性 加速度计 xff1a 静态稳定性好 xff0c 动态响应较慢 xff0c 在高频时信号不可用 xff0c 在运动时其数据相对不可靠 陀螺仪 xff1a 动态性能好 xff0c 响
  • 树莓派4B gpio readall 出现Oops - unable to determine board type... model: 17

    树莓派使用GPIO接口是基于wiringPi的 官网链接 xff1a http wiringpi com 1 xff1a 出现问题的界面 pi 64 raspberrypi gpio v gpio version 2 50 Copyrigh
  • 树莓派4B +远程SSH+远程桌面

    一 有线SSH连接树莓派 我的实验环境是笔记本电脑 43 树莓派4B 具体步骤为 xff1a 1 电脑连接上无线网络 xff0c 将电脑网线连接树莓派 2 打开如下界面 3 双击WLAN gt gt 点击属性 gt gt 再点击共享 选择以
  • 树莓派4B+wifi远程无线连接

    在树莓派无线连接前 xff0c 先设置一个静态IP 一来可以防范DHCP自动分配的ip来回变动 xff0c 导致远程SSH时常无法连接 xff1b 二来还可以提高树莓派的网络连接速率 1 一般先使用HDMI连接树莓派 xff0c 若没有额外
  • ESP32 FreeRTOS-流缓冲区(12)

    提示 xff1a 好记性不如烂笔头 本博客作为学习笔记 xff0c 有错误的地方希望指正 文章目录 前言 xff1a 一 xStreamBufferCreate xStreamBufferCreateWithCallback 二 xStre
  • windows10下安装docker,并运行ubuntu

    先上三个参考链接 xff1a 安装参考链接docker安装 xff1b docker镜像仓库 xff1a docker hub xff1b docker官方windows安装参考文档 xff1a install docker desktop
  • windows10下使用docker开启Ubuntu桌面

    先安装docker xff1a https blog csdn net Mr FengT article details 107007999 然后随便在仓库中选择一个带有桌面的Ubuntu 比如我下载的 xff1a docker pull
  • Linux下的tar压缩解压缩命令详解

    tar c 建立压缩档案 x xff1a 解压 t xff1a 查看内容 r xff1a 向压缩归档文件末尾追加文件 u xff1a 更新原压缩包中的文件 这五个是独立的命令 xff0c 压缩解压都要用到其中一个 xff0c 可以和别的命令
  • Apex安装

    直接 xff1a pip install apex 最后发现会出错 xff0c 用不了 所以使用以下方法来安装 xff1a git clone https github com NVIDIA apex cd apex python setu
  • ROS 主从通信机制要点记录

    本文主机是PC xff0c 从机是树莓派4B 1 主从机器都处于同一局域网下 xff0c 即连接同一wifi 2 分别在主从机上终端输入 ifconfig 查看当前ip 3 分别打开主从机器的 etc hosts 文件 xff0c 使用su
  • 怎么制作自己的数据集

    我们在做深度学习时 xff0c 一般都是跑别人公开的数据集 xff0c 如果想要跑自己的数据集怎么办 xff1f 今天就记录一下我自己用的一种方法 1 假设待分类一共有n类 2 新建一个文件夹 xff0c 在该文件夹下新建n子个文件夹和n个
  • python 将列表中的字符串转为数字

    python 将列表中的字符串转为数字 转自 xff1a https www jb51 net article 86561 htm 本文实例讲述了Python中列表元素转为数字的方法 分享给大家供大家参考 xff0c 具体如下 xff1a
  • AI编程软件会取代程序员吗?

    最近听到同事问了这样一个问题 xff0c 今天就来好好的唠一唠 xff0c 随着科学技术的发展 xff0c 现在生命上都已经开始出现AI编程软件了 不由得感叹 xff0c 一句现在时代发展还真快呀 xff01 然后我就和他一样产生了一种小小
  • python的requests快速上手、高级用法和身份认证

    https www cnblogs com linkenpark p 10221362 html 快速上手 迫不及待了吗 xff1f 本页内容为如何入门 Requests 提供了很好的指引 其假设你已经安装了 Requests 如果还没有
  • MongoDB

    MongoDB简介 MongoDB是一个基于分布式文件存储的数据库 由C 43 43 语言编写 旨在为WEB应用提供可扩展的高性能数据存储 解决方案 MongoDB是一个介于关系数据库和非关系数据库之间的产品 xff0c 是非关系数据库当中