MongoDB常用命令大全,概述、备份恢复
文章目录
- 一、MongoDB简介
- 二、服务启动停止、连接
- 三、数据库相关
- 四、集合操作
- 五、文档操作
- 六、数据备份与恢复/导入导出数据
- 6.1 mongodump备份数据库
- 6.2 mongorestore还原数据库
- 6.3 mongoexport导出表 或 表中部分字段
- 6.4 mongoimport导入表 或 表中部分字段
- 七、其他常用命令
- 八、补充
还记得MySQL、Redis、PostgreSQL、ClickHouse常用命令及操作吗?如果忘记可以到这里重新温习: MySQL常用命令,Redis常用命令,PostgreSQL常用命令,ClickHouse常用命令,启动、关闭、连接、备份、导入导出。本文重点讲述MongoDB常用命令。
一、MongoDB简介
MongoDB是一款流行的NoSQL数据库,以其灵活的文档模型、高可用性、易于扩展等特性而受到广泛关注。
- MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统;在高负载的情况下,添加更多的节点,可以保证服务器性能;MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案;MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成;MongoDB 文档类似于 JSON 对象。
- 特点:高性能、高可用、高扩展、丰富的查询支持、动态模式和灵活的文档模型
- 应用场景:网站实时数据处理;缓存;高伸缩性的场景
MongoDB
中的记录是一个文档,它是由字段和值对组成的数据结构。多个键及其关联的值有序地放在一起就构成了文档。MongoDB文档
类似于JSON
对象。字段的值可以包括其他文档,数组和文档数组。{“greeting”:“hello,world”, “foo”: 3}
在MongoDB中基本的概念是文档、集合、数据库。
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document(集合中的数据) | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
数据库服务和对应的客户端
数据库服务 | 客户端 |
---|---|
Mysqld/Oracle | mysql/sqlplus |
mongodb | mongo |
在MongoDB中,常用命令包括数据库操作、集合操作、文档操作等几个方面。以下是MongoDB的一些常用命令及其说明
二、服务启动停止、连接
#windows cmd 或 Linux 终端
mongo --version#启动
#Windows启动与停止 命令行指令、任务管理器手动启动停止
#以管理员方式运行cmd,输入以下命令
net start mongodb
net stop mongodb #停止mongodb服务
netstat -aon | findstr 27017#Linux启动与停止
/xxx/mongodb-server/bin/mongod -f /xxx/mongodb-server/conf/mongodb.conf #启动
ps -ef | grep mongodb-server
netstat -tunlp | grep 27017
ps -aef | grep mongodb-server | grep -v grep | awk '{print $2}' | xargs -t kill -9 #停止#连接mongodb
#配置了环境变量的前提下 在任意目录可通过mongo进入数据库;否则需要在mongodb安装目录下操作
mongo #无密码
mongo 10.169.215.xx:27017/admin -uroot -p1234 #有密码
mongo localhost:27017/admin -uroot -p密码
mongo admin -uroot -p密码
已开启认证的,除了mongo 10.169.215.xx:27017/admin -uroot -p1234
连接;还可以通过 mongo进入命令行,使用use admin通过db.auth(‘root’,‘密码’) 输出1就是验证成功。
windows下启动、停止、查看mongodb
linux下启动、停止、查看mongodb
三、数据库相关
- 连接数据库
- 使用MongoDB Shell连接:
mongo [host]:[port]/[dbname]
,其中[host]
是数据库服务器地址,[port]
是端口号(默认为27017),[dbname]
是数据库名。如果连接本地数据库,可以简化为mongo
或mongo localhost
;有密码则需要加上对应的参数 -u、-p - 使用完整连接字符串:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
。
- 使用MongoDB Shell连接:
- 查询所有数据库
- 命令:
show dbs
或show databases
- 命令:
- 创建/切换数据库
- 命令:
use database_name
。如果数据库不存在,则创建并切换到该数据库;如果数据库已存在,则直接切换到该数据库。
- 命令:
- 删除数据库
- 先切换到要删除的数据库,然后执行命令:
db.dropDatabase()
。
- 先切换到要删除的数据库,然后执行命令:
- 查看当前使用的数据库
- 命令:
db
或db.getName()
- 命令:
- 显示数据库中的用户:
show users
#mongodb命令行
show dbs #查询所有数据库
use database_name #创建/切换数据库
db.dropDatabase() #删除数据库
db 或 db.getName() #查看当前使用的数据库
show users #显示数据库中的用户
四、集合操作
- 创建集合
- 命令:
db.createCollection(name, options)
。其中name
是集合名称,options
是可选参数,用于指定集合的特性,如固定集合(capped collection)的大小和最大文档数。 - 集合的隐式创建:当向一个集合中插入一个文档的时候,如果集合不存在,则会自动创建集合。 提示:通常我们使用隐式创建文档即可
- 命令:
- 查看所有集合
- 命令:
show collections
或show tables
- 命令:
- 删除集合
- 命令:
db.collection_name.drop()
。成功删除集合将返回true
,否则返回false
- 命令:
- 查询当前集合的数据条数:
db.yourCollec.count()
#mongodb命令行
use wjTemp #如果wjTemp数据库不存在,则创建并切换到该数据库;如果数据库已存在,则直接切换到该数据库
db.createCollection("myCollec") #创建myCollec集合
db.createCollection("myCollec2")
db.createCollection(“collName”, {size: 20, capped: 5, max: 100});
show tables #查看所有集合
db.myCollec2.drop() #删除myCollec2集合
show collectionsdb.getCollection("account") #得到指定名称的聚集集合(table)
db.getCollectionNames() #得到当前db的所有聚集集合
db.printCollectionStats() #显示当前db所有聚集索引的状态
五、文档操作
- 插入文档:使用
insert
或save
方法插入文档(在较新的 MongoDB 版本中,save
方法已被弃用,推荐使用insertOne
或insertMany
)- 单条插入:
db.collection_name.insert(document)
或db.collection.insertOne(document)
- 多条插入:
db.collection_name.insert([document1, document2, ...])
或db.collection.insertMany([document1, document2, ...])
- 单条插入:
- 查询文档
- 查询所有文档:
db.collection_name.find()
。相当于 select * from collection_name - 查询满足条件的文档:
db.collection_name.find(query)
,其中query
是查询条件。 - 格式化显示查询结果:
db.collection_name.find().pretty()
- 查询并返回第一个匹配的文档:
db.collection_name.findOne(query)
- 查询所有文档:
- 更新文档:update、updateOne、updateMany
- 使用
update
方法:db.collection.update(<query>, <update>, {upsert: <boolean>, multi: <boolean>})
。其中query
是查询条件,类似sql update查询内where后面的;update
是更新内容,也可以理解为sql update查询内set后面的;upsert
可选,表示如果不存在满足条件的文档,是否插入新文档(默认为false
);multi
可选,表示是否更新所有满足条件的文档(默认为false
,只更新第一个)。 - 使用
$set
操作符更新字段:db.collection.update(query, {$set: {field: value}})
- 使用
- 删除文档:remove、deleteOne、deleteMany
- 删除满足条件的文档:
db.collection.remove(query, {justOne: <boolean>})
。其中query
是删除条件,justOne
表示是否只删除第一个匹配的文档(默认为false
,删除所有匹配的文档)。 - 使用
deleteOne
或deleteMany
方法(MongoDB 3.2+):db.collection.deleteOne(query)
或db.collection.deleteMany(query)
- 删除满足条件的文档:
#插入、查询、删除
db.myCollec.insert({title: 'MongoDB', description: 'MongoDB NOSQL',by: 'test',url: 'https:',tags: ['mongodb', 'database', 'NoSQL'],likes: 100
})
db.myCollec.find()
db.myCollec.update({'title':'MongoDB'},{$set:{'title':'MongoDB-test'}})
db.myCollec.remove({'title':'MongoDB-test'})#查询
db.userInfo.find() #查询所有记录
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) #分页列表查询。使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据
db.userInfo.distinct("name") #查询去掉后的当前聚集集合中的某列的重复数据。会过滤掉name中的相同数据,相当于:select distict name from userInfo
db.userInfo.find({"age": 23}) #查询age = 23的记录,相当于 select * from userInfo where age = 23
db.userInfo.find({age: {$gt: 23}}) #查询age > 23的记录
db.userInfo.find({age: {$gte: 25}}) #查询age >= 25的记录
db.userInfo.find({name: /mongo/}) #查询name中包含 mongo的数据,//相当于%%,相当于 select * from userInfo where name like ‘%mongo%’
db.userInfo.find({name: /^mongo/}) #查询name中以mongo开头的,select * from userInfo where name like ‘mongo%’
db.userInfo.find({}, {name: 1, age: 1}) #查询指定列name、age数据,相当于:select name, age from userInfo
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1}) #查询指定列name、age数据, age > 25。相当于:select name, age from userInfo where age >25
#按照年龄排序
db.userInfo.find().sort({age: 1}) #升序
db.userInfo.find().sort({age: -1}) #降序
db.userInfo.find({name: 'zhangsan', age: 22}) #查询name = zhangsan, age = 22的数据。相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;
db.userInfo.find().limit(5) #查询前5条数据。相当于:selecttop 5 * from userInfo;
db.userInfo.find().skip(10) #查询10条以后的数据。相当于:select * from userInfo where id not in (selecttop 10 * from userInfo)
db.userInfo.find().limit(10).skip(5) #查询在5-10之间的数据。可用于分页,limit是pageSize,skip是第几页*pageSize
db.userInfo.find({sex: {$exists: true}}).count() #按照某列进行排序。相当于:select count(sex) from userInfo
六、数据备份与恢复/导入导出数据
-
定时备份/全量备份
-
备份 mongodump,还原 mongorestore
-
备份格式: bson/gzip
-
-
分析数据/迁移数据
-
备份 mongoexport,还原 mongoimport
-
备份格式:json csv
-
常见备份恢复方法
1)备份全库、单个库:
mongodump --host mongodb1.example.net --port 27017 -u用户名 -p密码 --db mydbname --out /path/to/backup/
mongorestore --host mongodb2.example.net --port 27017 -u用户名 -p密码 --db mydbname /path/to/backup/mydbname/mongodump -h ip:端口 -uroot -p密码 -d 数据库 -o 路径 #备份数据库
mongodump -uroot -p密码 -d 数据库 -c 集合名 -o 路径 #备份数据库某个集合
mongorestore -h 127.0.0.1:27017 -u用户名 -p密码 -d 数据库 --dir /路径/数据库名/#加密后备份
mongodump -h ip:port -uroot -p密码 -d 数据库 --authenticationDatabase admin -o 路径
mongodump -uroot -p密码 -d 数据库 -c 集合名 --authenticationDatabase admin -o 路径 mongorestore -uroot -p密码 -d wjTemp2 --authenticationDatabase admin --dir /root/mon_wjTemp/wjTemp/
2)备份某个库的某张表:
mongoexport备份
mongoexport备份某个表语法格式:mongoexport --port 端口号 -d 库名 -c 表名 -o 备份文件路径.json
mongoexport备份某个表csv格式:mongoexport --port 端口号 -d 库名 -c 表名 --type=csv -f 备份的字段 -o 备份文件路径.csv
mongoimport还原
mongoimport还原某个表json格式:mongoimport --port 26017 -d 要还原的库名-c 表名 备份文件路径.json
mongoimport还原某个表csv格式: mongoimport --port 26017 -d 库名 -c 表名–type=csv --headerline 备份文件路径.csv
(mongoimport还原csv格式表时要加上–headerline参数,否则会将字段名也作为一条数据插入;–headerline和-f不能同时使用)
mongodump备份
mongodump备份库:mongodump --port 26017 -d 库名 -o 备份文件路径
mongorestore还原
mongorestore还原:mongorestore --port 26017 -d 库名 备份文件路径 --drop
6.1 mongodump备份数据库
常用命令格式如下:
mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径
mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 集合名 -o 文件存在路径
- 如果没有用户,可以去掉-u和-p。
- 如果导出本机的数据库,可以去掉-h。
- 如果是默认端口,可以去掉–port。
- 如果想导出所有数据库,可以去掉-d
mongodump -h 127.0.0.1 -u用户名 -p密码 -o /home/dev/mongodb/ #备份所有数据库
mongodump -h ip --port 端口 -u用户名 -p密码 -d tank -o /home/dev/mongodb/ #备份指定数据库mongodump -uroot -p密码 -d wjTemp -o /root/mon_wjTemp
mongodump -uroot -p密码 -d wjTemp --authenticationDatabase admin -o /root/mon_wjTemp
如果报错 Failed: error connecting to db server: server returned error on SASL authentication step: Authentication failed.
,可以添加--authenticationDatabase admin
。
示例:
mongodump -h 192.168.31.251:27017 -d my_db -u test_user -p test_user -o c:\mongoBackup
mongodump -h 192.168.31.251 -port:27017 -d my_db -u test_user -p test_user -o c:\mongoBackupmongodump -uroot -p密码 -d wjTemp --authenticationDatabase admin -o /root/mon_wjTemp
6.2 mongorestore还原数据库
mongorestore --host <hostname> --port <port> --db <database> <path_to_backup>
mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径
–drop的意思是,先删除所有的记录,然后恢复。
mongorestore -h ip:port -u 用户名 -p 密码 /home/dev/mongodb/ #恢复所有数据库到mongodb中。这里的路径是所有库的备份路径
mongorestore -d tank /home/dev/mongodb/tank/ #还原指定的数据库# 使用新建用户恢复demodb数据库
mongorestore -u 用户名 -p 密码 -d db_name c:\mongoBackup\my_db --authenticationDatabase admin -u admin -p password# 或使用admin用户恢复数据到 yuandb 数据库中
mongorestore -u admin -p admin123 -d yuandb c:\mongoBackup\my_db --authenticationDatabase admin -u admin -p admin123
#【注意:备份的数据库文件路径(c:\mongoBackup\my_db)一定要指定到xxx.bson的根目录 】
恢复前先要使用use 命令切换到要导入的数据库
在切换后的数据库下新建用户,并设置角色及所属数据库
使用新建用户或admin用户导入
使用新建的用户连接数据库
【注意:先用admin用户导入,然后再创建普通用户并设置角色及指定所属数据库,最终新建用户是无法连接数据库的】
通过以上步骤虽然能导入数据库,但是在连接时会提示授权错误,暂时就用admin一个用户就行
6.3 mongoexport导出表 或 表中部分字段
常用命令格式
mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -q 条件导出 --csv -o 文件名
上面的参数好理解,重点说一下:
- -f 导出指定字段,以字号分割,-f name,email,age 导出name,email,age这三个字段
- -q 可以根查询条件导出,-q ‘{ “uid” : “100” }’ 导出uid为100的数据
- –csv 表示导出的文件格式为csv的,这个比较有用,因为大部分的关系型数据库都是支持csv,在这里有共同点
mongoexport -d tank -c users -o /home/dev/mongodb/tank/users.dat #导出整张表
mongoexport -d tank -c users --csv -f uid,name,sex -o tank/users.csv #导出表中部分字段
mongoexport -d tank -c users -q '{uid:{$gt:1}}' -o tank/users.json #根据条件敢出数据
6.4 mongoimport导入表 或 表中部分字段
常用命令格式:
1)还原整表导出的非csv文件
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsert --drop 文件名
重点说一下–upsert,其他参数上面的命令已有提到,–upsert 插入或者更新现有数据
2)还原部分字段的导出文件
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsertFields 字段 --drop 文件名
–upsertFields根–upsert一样
3)还原导出的csv文件
mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --type 类型 --headerline --upsert --drop 文件名
上面三种情况,还可以有其他排列组合的。
示例:
mongoimport -d tank -c users --upsert tank/users.dat #还原导出的表数据
mongoimport -d tank -c users --upsertFields uid,name,sex tank/users.dat #部分字段的表数据导入
mongoimport -d tank -c users --type csv --headerline --file tank/users.csv #还原csv文件
七、其他常用命令
- 查看帮助:
db.help()
或db.yourCollec.help()
或db.yourCollec.find().help()
- 显示当前db状态:
db.stats()
; 当前db版本:db.version()
; 查看当前db的链接机器地址:db.getMongo()
- 查看集合状态:
db.collection.stats()
- 修复数据库:
db.repairDatabase()
- 复制/克隆数据库:
db.cloneDatabase("hostname")
或db.copyDatabase("fromdb", "todb", "hostname")
。 - 查询之前的错误信息:
db.getPrevError()
; 清除错误记录:db.resetError()
- 用户操作
#添加一个用户
db.addUser("name");
db.addUser("userName", "pwd123", true); 添加用户、设置密码、是否只读#数据库认证、安全模式
db.auth("userName", "123123")
show users #显示当前所有用户
db.removeUser("userName") #删除用户#添加用户、安全认证
#首先必须使用admin数据库,进行新用户授权;授权成功后,关闭mongo服务
use admin
db.createUser({user:"root",pwd:"123456",roles:[{role:"root",db:"admin"}]})
db.shutdownServer()
#验证:使用use admin通过db.auth(‘root’,‘密码’) 输出1就是验证成功
use admin
db.auth('root','123456')
db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库
db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中
八、补充
Navicat操作MongoDB,增删改查的完整代码
use DATABASE_NAME #如果数据库不存在,则创建数据库,否则切换到指定数据库
show dbs #查看所有数据库
db.dropDatabase() #删除当前数据库(默认为test,可通过use db_name切换)#创建集合
db.createCollection(name[, options])
db.createCollection("runoob")
db.createCollection("mycol", {capped:true, autoIndexId:true, size:6142800, max:10000}) #创建固定集合 mycol,整个集合空间大小 6142800B, 文档最大个数为 10000个
show collections show tables #查看已有集合
#在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB会自动创建集合
db.mycol2.insert({"name" : "菜鸟教程"})
db.collection.drop() #删除集合。(use db1,show tb1)#插入文档
db.COLLECTION_NAME.insert(document) 或 db.COLLECTION_NAME.save(document)save():如果_id主键存在则更新数据,如果不存在就插入数据(类似于insert方法)。该方法新版本中(3.2版本之后)已废弃,可以使用db.collection. insertOne()或db.collection.replaceOne()来代替。insert(): 若插入的数据主键已经存在,则会抛 org.springframework. dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。#db.collection.insertOne() 用于向集合插入一个新文档
db.collection.insertOne(<document>,{writeConcern: <document>}
)
#db.collection.insertMany() 用于向集合插入一个多个文档
db.collection.insertMany([ <document 1> , <document 2>, ... ],{writeConcern: <document>,ordered: <boolean>}
)
#document:要写入的文档;writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求;ordered:指定是否按顺序写入,默认 true,按顺序写入。db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库',by: '菜鸟教程',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100
}) 或
document=({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库',by: '菜鸟教程',url: 'http://www.runoob.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100
});
db.col.insert(document)#更新文档
db.collection.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>}
)query : update的查询条件,类似sql update查询内where后面的;update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的;upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。writeConcern :可选,抛出异常的级别。db.col.update({'title':'MongoDB教程'},{$set:{'title':'MongoDB'}})#以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true
db.col.update({'title':'MongoDB教程'},{$set:{'title':'MongoDB'}},{multi:true})#save()方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入
db.collection.save(<document>,{writeConcern: <document>}
)
#两个参数同update对应参数#删除文档
db.collection.remove(<query>,{justOne: <boolean>,writeConcern: <document>}
)
query :(可选)删除的文档的条件;justOne : (可选)如果设为true或1,则只删除一个文档,如果不设置该参数,或使用默认值false,则删除所有匹配条件的文档;writeConcern :(可选)抛出异常的级别。
db.users.remove({status:"D"},true)
#删除满足年龄小于20的所有文档
db.users.remove( { age: { $lt: 20 } },{ writeConcern: { w: "majority", wtimeout: 5000 } }
)
#删除满足匹配条件的最多一个文档。filter为查询的过滤条件
db.collection.deleteOne(<filter>, {writeConcern: <document> #用于控制写入何时应答及超时}
)
#删除满足匹配条件的所有文档,语法、参数同deleteOne
db.collection.deleteMany(<filter>, {writeConcern: <document> }
)
#删除所有数据
db.col.remove({})
#MongoDB remove()函数是用来移除集合中的数据。在执行remove()函数前先执行 find()命令来判断执行的条件是否正确,这是一个比较好的习惯。#查询文档 and,or
db.collection.find(query, projection)
#projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
#如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,pretty() 方法以格式化的方式来显示所有文档,格式如下:
db.col.find().pretty() #以易读的方式来读取数据
#findOne() 方法,只返回一个文档
#MongoDB的find()方法可以传入多个键(key),每个键(key)以逗号隔开,即常规SQL 的AND条件。WHERE key1=value1 AND key2=value2
db.col.find({key1:value1, key2:value2}).pretty()
db.col.find({$or: [{key1: value1}, {key2:value2}]}
).pretty()
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty() # 类似常规SQL语句为 'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'
db.member.find({_id :{$gt: 2}, age:18});
db.member.find({_id :{$gt: 2}}).sort({_id:-1});
#返回指定字段,注:_id默认是显示的,只有_id不显示是设置0,其他字段都不可以设置0
find({查询条件,可以空},{显示的字段:1})
MongoDB 与 RDBMS Where 语句比较
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value> } | db.col.find({"by":"菜鸟教程"}).pretty() | where by = '菜鸟教程' |
小于 | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
mongo查询操符: e q , eq, eq,ne, i n , in, in,nin, g t , gt, gt,get, l t , lt, lt,lte, a n d , and, and,or, n o t , not, not,nor,$all, e l e M a t c h , eleMatch, eleMatch,size, s l i c e , slice, slice,exists
mongo操作符 | 描述 | 对比mysql |
---|---|---|
$e | 等值比较,find({_id :{ $eq: 1}}) 等价于 find({id : 1}) | id=1 |
$ne | 不等于指定值,find({_id:{$ne:1}}) | id!=1或id<>1 |
$in | 数组中包含 ,find( { _id :{ $in: [ 1,2 ] } } ) | id in (1,2) |
$nin | 数组中不包含,find( { _id :{ $nin: [ 1,2 ] } } ) | id not in (1,2) |
g t , gt, gt,get, l t , lt, lt,lte | ||
$and | 与(并且)查询,find({$and:[ { _id:{ $gt:1} },{ _id:{ $lt:4} } ]}) | id>1 and id<4 |
$or | 或查询,find({$or:[ { _id:1 },{ _id: 3} ]}) | id=1 or id=3 |
$not | 非查询,非小于3的数据 find({_id :{$not :{ $lt: 3 } } }) | id>=3 |
$nor | 即非查询,find( { $nor: [ { _id: 1 }, { _id: 2 }, { _id: 3 }] } ) | (id!=1 and id!=2 and id!=3) |
$all | 同时包含,查询tag同时包含3和9的数据,tag是一个数组,find({tag:{$all:[3,9]}}),可查看下面示例 | 无 |
$elemMatch | 有一个元素匹配即可,find({job:{$elemMatch:{city:‘beijing’,company:‘xiaomi’}}}),可查看下面示例 | 无 |
$size | 匹配数组大小,find({tag:{$size:3}}),可查看下面示例 | 无 |
$slice | 返回数组中第几个元素,find({job:{KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 43: …ompany:‘baidu’}}̲},{name:1,job:{slice:1}}),可查看下面示例 | 无 |
$exists | 匹配是否包含查询字段的文档,find({name:{$exists:true}}) | 无 |
新增:db.集合名称.insert/save/insertOne(文档)
修改:db.集合名称.update(条件,{操作种类:{文档}})
删除:db.集合名称.remove(条件)
#查询所有数据2种写法
db.book.find()
db.getCollection("book").find()
db.book.find({type:"工具书"}) #条件查询db.book.remove({type:"工具书"}) #条件删除
db.book.remove({}) #删除所有#新增数据2种方式
db.book.save({"name":"springboot"});
db.book.insert({"name":"mango good"});
db.book.save({"name":"springboot",type:"工具书"});#修改"name":"springboot"的数据为"name","springboot2"
# update:遇到满足条件的第一条数据修改;updateOne:修改满足条件的第一条数据;updateMany:修改所有满足条件的
db.book.update({"name":"springboot"},{$set:{"name":"springboot2"}})
db.book.updateOne({"name":"springboot2"},{$set:{"name":"springboot3"}})
db.book.updateMany({"name":"springboot"},{$set:{"name":"springboot2"}})
$type 操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果(Double 1;String 2;Object 3)
db.col.find({"title" : {$type : 2}}) 或
db.col.find({"title" : {$type : 'string'}})limit(number) 在MongoDB中读取指定数量的数据记录
db.COLLECTION_NAME.find().limit(NUMBER)
skip(number) 跳过指定数量的数据,默认参数为0
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
db.col.find({},{"title":1,_id:0}).limit(1).skip(1) //显示第二条数据使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用1和 -1来指定排序的方式,其中1为升序排列,而-1是用于降序排列.
db.COLLECTION_NAME.find().sort({KEY:1})
skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先sort(), 然后是skip(),最后是显示的limit()扫描全集合的查询效率是非常低,索引通常能够极大的提高查询的效率。索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
db.collection.createIndex(keys, options) //创建索引,Key值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可
db.col.createIndex({"title":1,"description":-1}) //多字段创建索引
db.col.getIndexes() //查看集合索引
db.col.totalIndexSize() //查看集合索引大小
db.col.dropIndexes() //删除集合所有索引
db.col.dropIndex("索引名称") //删除集合指定索引聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似 SQL 语句中的 count(*)。$sum,$avg,$min/max,$push,$addToSet,$first/last
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) 类似于sql语句
select by_user, count(*) from mycol group by by_userMongoDB复制是将数据同步在多个服务器的过程.
MongoDB备份(mongodump,可以导出所有数据到指定目录中)与恢复(mongorestore,恢复备份的数据)
mongodump -h dbhost -d dbname -o dbdirectory
-o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据
mongorestore -h <hostname><:port> -d dbname <path>
<path>:mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。mongostat和mongotop 两个命令来监控MongoDB的运行情况。
mongostat是mongodb自带的状态检测工具,在命令行下使用(安装目录下的bin目录 输入mongostat)。它会间隔固定时间获取mongodb的当前运行状态,并输出。
mongotop也是mongodb下的一个内置工具,mongotop提供了一个方法,用来跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据。 mongotop提供每个集合的水平的统计数据。默认情况下,mongotop返回值的每一秒。(用法同mongostat)
mongotop number //<sleeptime>参数,可不使用,等待的时间长度,以秒为单位
MongoDB关系: 1:1,1:N,N:1,N:N
嵌入式方法/关系
引用式方法/关系:把用户数据文档和用户地址数据文档分开,通过引用文档的 id 字段来建立关系
参考 MongoDB常用命令详细讲解(最全)、Mongo基本命令
相关文章:

MongoDB常用命令大全,概述、备份恢复
文章目录 一、MongoDB简介二、服务启动停止、连接三、数据库相关四、集合操作五、文档操作六、数据备份与恢复/导入导出数据6.1 mongodump备份数据库6.2 mongorestore还原数据库6.3 mongoexport导出表 或 表中部分字段6.4 mongoimport导入表 或 表中部分字段 七、其他常用命令八…...

uni-app 保存号码到通讯录
1、 添加模块 2、添加权限 3、添加策略 Android: "permissionExternalStorage" : {"request" : "none","prompt" : "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片…...

Jetson-AGX-Orin gstreamer+rtmp+http-flv 推拉流
Jetson-AGX-Orin gstreamerrtmphttp-flv 推拉流 Orin是ubuntu20.04 ARM64架构的系统,自带gstreamer 1、 测试摄像头 测试摄像头可以用v4l2-ctl命令或者用gst-launch-1.0 #用v4l2-ctl测试摄像头,有尖角符号持续打印则正常 v4l2-ctl -d /dev/video0 --set-fmt-vid…...

ES证书过期替换方案
简介: 在生产环境中,Elasticsearch 集群的证书可能会因为过期而导致集群无法正常工作。为了避免这种情况的发生,我们需要及时更新证书,并保证更新证书的过程中保持 Elasticsearch 集群的高可用性和数据安全性。 集群环境 ES集群版…...

计算机网络——网络层(IP地址与MAC地址、地址解析协议ARP、IP数据报格式以及转发分组、ICMP、IPV6)
IP地址与MAC地址 由于MAC地址已固化在网卡上的ROM 中,因此常常将 MAC地址称为硬件地址或物理地址;物理地址的反义词就是虚拟地址、软件地址或逻辑地址,IP地址就属于这类地址。 从层次的角度看,MAC地址是数据链路层使用的地址&…...

音视频入门基础:H.264专题(13)——FFmpeg源码中通过SPS属性获取视频色彩格式的实现
一、引言 通过FFmpeg命令可以获取到H.264裸流文件的色彩格式(又译作色度采样结构、像素格式): 在vlc中也可以获取到色彩格式(vlc底层也使用了FFmpeg进行解码): 这个色彩格式就是之前的文章《音视频入门基础…...

WEB前端05-JavaScrip基本对象
JavaScript对象 1.Function对象 函数的创建 //方法一:自定义函数 function 函数名([参数]) {函数体[return 表达式] }//方法二:匿名函数 (function([参数]) {函数体[return 表达式] }); **使用场景一:定义后直接调用使用(只使用一次) (fun…...

新手教学系列——简单的服务配置项集中管理
前言 在开发和运维过程中,配置管理是一个非常重要但经常被忽视的环节。常用的配置文件格式包括env、ini和yaml等,它们非常适合模块级别的系统配置,尤其是一些敏感信息的配置,例如数据库连接字符串和密码等。但是,对于…...

《0基础》学习Python——第十三讲__面向对象
<类(class)> 一、面向对象概念 1、面向对象是一种编程思想和技术,它是一种将程序设计问题分解成对象的方式。每个对象都有自己的状态(数据)和行为(方法),并且可以通过相互之间…...

前端JS特效第42波:纯CSS实现的卡片切换效果
纯CSS实现的卡片切换效果,先来看看效果: 部分核心的代码如下: <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><title>纯CSS实现的卡片切换效果演示</title><l…...

2.10、matlab中字符、数字、矩阵、字符串和元胞合并为字符串并将字符串以不同格式写入读出excel
1、前言 在 MATLAB 中,可以使用不同的数据类型(字符、数字、矩阵、字符串和元胞)合并为字符串,然后将字符串以不同格式写入 Excel 文件。 以下是一个示例代码,展示如何将不同数据类型合并为字符串,并以不…...

中文科技核心论文发表
中文科技核心论文题目如下: 1.混凝土结构用纤维增强塑料筋的耐久性评述:适合建筑、结构、材料等专业 2.建筑工程用阻燃塑料的研究进展:适合建筑、材料专业 3.纤维增强热塑性塑料在面部护具中的应用研究:适合化工、医学、材料等专…...

使用 Flask 3 搭建问答平台(一):项目结构搭建
一、项目基本结构 二、app.py from flask import Flask import config from exts import db from models import UserModel from blueprints.qa import bp as qa_bp from blueprints.auth import bp as auth_bp# 创建一个Flask应用实例,__name__参数帮助Flask确定应…...

力扣经典题目之->用队列实现栈 的详细讲解和实现,看这一篇就够了!
一:题目 二:思路 1:先看两个概念: 更清晰的对比: 理解这两张图的不同对题目的一个函数( 返回栈顶元素) 会更好做 由图可知 : 返回栈顶函数即返回队列队尾即可 2:题…...

[JS]认识feach
介绍 feach是浏览器内置的api, 用于发送网络请求 请求方式对比 AJAX: 基于XMLHttpRequest接收请求, 使用繁琐Axios: 基于Promise的请求客户端, 在浏览器和node中均可使用, 使用简单fetch: 浏览器内置的api, 基于Promise, 功能简单 基础语法 <body><button>发请求…...

tomcat如何进行调优?
从两个方面考虑:内存和线程 首先启动Tomcat,实际上就是启动了一个JVM,所以可以按JVM调优的方式来进行调整,从而达到Tomcat优化的目的。 另外Tomcat中设计了一些缓存区,比如appReadBufSize、bufferPoolSize等缓存区来提…...

复现GMM文章(一):图1代码和数据
介绍 复现GMM文章的的Fig1图。 加载R包 library(tidyr)library(tidyverse)library(dplyr)library(ggsci)library(ggpubr)导入数据 所有的数据可以通过下列链接下载: 百度网盘链接: https://pan.baidu.com/s/1isKEK1G5I6X90KYqLufmWw 提取码: t9ca 图1B 数据 …...

链接追踪系列-07.logstash安装json_lines插件
进入docker中的logstash 容器内: jelexbogon ~ % docker exec -it 7ee8960c99a31e607f346b2802419b8b819cc860863bc283cb7483bc03ba1420 /bin/sh $ pwd /usr/share/logstash $ ls bin CONTRIBUTORS Gemfile jdk logstash-core modules tools x-pack …...

火山引擎数据飞轮实践:在电商场景中,如何建设全链路数据血缘?
数据作为新型生产要素,正支撑企业的数智化转型。但企业数字化建设也存在管理成本高、数据产品使用门槛高、数据资产价值不够的问题,其原因在于业务和数据之间没有形成双向良性驱动。 结合新时代企业数字化转型需求,火山引擎基于字节跳动十余…...

使用加密软件对企业来说有什么好处
泄密时间近年来层出不穷,一旦重要文件或数据被盗,无疑会对企业带来巨大的损失。 2024年3月,我国某高新科技企业遭境外黑客攻击,相关信息化系统及数据被加密锁定,生产经营活动被迫停止。企业生产经营活动受阻ÿ…...

STM32入门开发操作记录(二)——LED与蜂鸣器
目录 一、工程模板二、点亮主板1. 配置寄存器2. 调用库函数 三、LED1. 闪烁2. 流水灯 四、蜂鸣器 一、工程模板 参照第一篇,新建工程目录ProjectMould,将先前打包好的Start,Library和User文件^C^V过来,并在Keil5内完成器件支持包的…...

n3.平滑升级和回滚
平滑升级和回滚 1. 平滑升级流程2. 平滑升级和回滚案例 有时候我们需要对Nginx版本进行升级以满足对其功能的需求,例如添加新模块,需要新功能,而此时 Nginx又在跑着业务无法停掉,这时我们就可能选择平滑升级 1. 平滑升级流程 平…...

C#WPF DialogHost.Show 弹出对话框并返回数据
在WPF中,使用DialogHost.Show方法显示一个对话框并获取返回数据,你需要定义一个对话框,并在对话框关闭时返回数据。以下是一个简单的例子: 首先,在主窗口中添加DialogHost控件: <MaterialDesign:DialogHost x:Name="dialogHost" /> 然后,创建一个对话…...

Kafka Producer发送消息流程之分区器和数据收集器
文章目录 1. Partitioner分区器2. 自定义分区器3. RecordAccumulator数据收集器 1. Partitioner分区器 clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java,中doSend方法,记录了生产者将消息发送的流程,其中有一步…...

Codeforces Round 958 (Div. 2)
C o d e f o r c e s R o u n d 958 ( D i v . 2 ) \Huge{Codeforces Round 958 (Div. 2)} CodeforcesRound958(Div.2) 文章目录 Problems A. Split the Multiset题意思路标程 Problems B. Make Majority题意思路标程 Problems C. Increasing Sequence with Fixed OR题意思路标…...

<数据集>猫狗识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:3686张 标注数量(xml文件个数):3686 标注数量(txt文件个数):3686 标注类别数:2 标注类别名称:[cat, dog] 序号类别名称图片数框数1cat118811892dog24982498 使用标…...

Figma 中文版指南:获取和安装汉化插件
Figma是一种主流的在线团队合作设计工具,也是一种基于 Web 端的设计工具。在当今的设计时代,Figma 的使用满足了每个人的设计需求,不仅可以实现在线编辑,还可以方便日常管理,有效提高工作效率。然而,相信很…...

用c语言写一个贪吃蛇游戏
贪吃蛇游戏通常涉及到终端图形编程和简单的游戏逻辑。以下是一个基本的实现示例,包括贪吃蛇的移动、食物生成、碰撞检测等功能。 1. 贪吃蛇游戏的基本结构 贪吃蛇游戏可以分为以下几个部分: 游戏地图和终端绘制:使用二维数组表示游戏地图&am…...

计算机网络入门 --网络模型
计算机网络入门 --网络模型 1.OSI七层模型 1.1 模型概念 OSI七层模型是将计算机网络通信协议划分为七个不同层次的标准化框架,每一层都负责不同功能,并从物理连接层开始处理。OSI七层网络模型如下分别为:物理层、数据链路层、网络层、传输…...

陪玩系统小程序模式APP小程序H5系统搭建开发
随着移动互联网的营及和游戏行业的蓬轨发展,陪玩服务应远而生并迅速唱起,陪玩系统小程序作为连接游戏玩家与陪玩师的桥梁,其模式系统的搭建与开发是得尤为重要,本文将洋细凰述陪玩系统小程宗模式系统的搭建开发流程,包…...