MongoDB安装和使用,MongoDB Like查询,Or查询,分页查询
MongoDB安装和使用,MongoDB4.4最新安装和使用
MongoDB Like查询
MongoDB Or查询
MongoDB 分页查询
================================
©Copyright 蕃薯耀 2021-06-18
https://www.cnblogs.com/fanshuyao/
一、MongoDb下载地址(需要注册登录):
官网各种版本下载地址:
https://www.mongodb.com/try/download/community
4.4.6版本直接下载地址:
https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-4.4.6-signed.msi
4.2.14版本直接下载地址:
https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2012plus-4.2.14-signed.msi
二、MongoDB安装
1、过程省略。
注意:
install mongoDB compass步骤时,去掉左下角的勾,不安装mongoDB compass,后面需要可自行下载安装。
MongoDB Compass 是一个图形界面管理工具,下载地址:
https://www.mongodb.com/download-center/compass
三、MongoDB启动运行
1、MongoDB4.4在安装完成后,已经自动生成服务并设置自启动,此时服务也已经启动
安装完成后,MongoDB已经自动生成服务并已经启动:
服务名称:MongoDB
显示名称:MongoDB Server (MongoDB)
D:\0soft\MongoDB\Server\4.4\bin\mongod.exe --config "D:\0soft\MongoDB\Server\4.4\bin\mongod.cfg" --service
所以具体的配置看配置文件:
D:\0soft\MongoDB\Server\4.4\bin\mongod.cfg
MongoDB数据存放目录配置:
storage:
dbPath: D:\0soft\MongoDB\Server\4.4\data
MongoDB日志存放目录配置:
systemLog: destination: file logAppend: true path: D:\0soft\MongoDB\Server\4.4\log\mongod.log
浏览器打开:
http://127.0.0.1:27017/
进行测试
It looks like you are trying to access MongoDB over HTTP on the native driver port.
看到上面的信息就表示MongoDB启动成功!^_^
2、MongoDB通过Zip压缩包安装运行(执行文件安装的,此步直接跳过)
打开cmd,进入到MongoDB的bin目录,输入mongod命令
d: cd D:\0soft\MongoDB\Server\4.4\bin mongod
直接运行mongod会报错,原因是要手动创建MongoDb的数据存放目录(D:\data\db\,如果安装在C盘,则是:C:\data\db\):
NonExistentPath: 未找到数据目录 D:\\data\\db\\。
创建丢失的目录或使用 (1) --dbpath 命令行选项指定另一个路径,
或 (2) 通过在配置文件中添加 'storage.dbPath' 选项。
NonExistentPath: Data directory D:\\data\\db\\ not found. Create the missing directory or specify another path using (1) the --dbpath command line option, or (2) by adding the 'storage.dbPath' option in the configuration file. { "t": { "$date": "2021-06-02T11:12:45.209+08:00" }, "s": "E", "c": "STORAGE", "id": 20557, "ctx": "initandlisten", "msg": "DBException in initAndListen, terminating", "attr": { "error": "NonExistentPath: Data directory D:\\data\\db\\ not found. Create the missing directory or specify another path using (1) the --dbpath command line option, or (2) by adding the 'storage.dbPath' option in the configuration file." } }
解决方案:
在D:\0soft\MongoDB下创建目录\data\db,即:D:\0soft\MongoDB\data\db\
指定--dbpath 和指定端口--port 27018 运行
mongod --dbpath D:\0soft\MongoDB\data\db --port 27018
{"t":{"$date":"2021-06-02T17:55:46.464+08:00"},"s":"I", "c":"NETWORK", "id":23016, "ctx":"listener","msg":"Waiting for connections","attr":{"port":27018,"ssl":"off"}}
指定日志目录:--logpath
查看版本:--version
其它参数可以通过:mongod --help 查看
四、打开MongoDB命令窗口
进入MongoDB bin目录:
D:\0soft\MongoDB\Server\4.4\bin
双击:mongo.exe 打开MongoDB命令窗口
输入命令
show dbs;
查看所有的数据库
> show dbs; admin 0.000GB config 0.000GB local 0.000GB test 0.000GB >
输入命令db查看当前所在的数据库
> db
test
五、利用工具连接MongoDB
可以从官网下载:MongoDBCompass
1、最简单的连接:
mongodb://localhost mongodb://127.0.0.1
指定端口,默认为27017
mongodb://127.0.0.1:27017
2、MongoDB标准 URI 连接语法:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
带用户名和密码
mongodb://sysop:moon@localhost
带用户名、密码、具体的数据库名
mongodb://sysop:moon@localhost/records
分片集群
mongodb://router1.example.com:27017,router2.example2.com:27017,router3.example3.com:27017/
带Options参数
mongodb://db1.example.net:27017,db2.example.net:2500/?replicaSet=test&connectTimeoutMS=300000
六、MongoDB命令使用
官方文档:
https://docs.mongodb.com/manual/crud/
1、查看当前操作的(文档)数据库
> db
test
2、查看所有数据库
> show dbs; admin 0.000GB config 0.000GB local 0.000GB
3、直接简单运算
> 2+2 4
4、插入数据
> db.study.insert({a:"1",b:2,type:"1"});
WriteResult({ "nInserted" : 1 })
db.collection.insertOne() New in version 3.2
db.collection.insertMany() New in version 3.2
数据格式:
{ "_id": { "$oid": "60b7620ddda49c13110ec455" }, "name": "66", "ages": { "$numberLong": "6" }, "booleanFlag": false, "date": { "$date": "2021-06-01T16:00:00.000Z" }, " time": { "$timestamp": { "t": 0, "i": 0 } }, "doubleFlag": 5.2, "arr": ["aa", "bb", "cc", "dd"], "bin": { "$binary": "", "$type": "1" }, "number32": 2, "number64": { "$numberLong": "5" } }
5、批量插入数据
> db.study.insert([{name : "王多多", age : 35, type : "4"}, {name : "马哈哈", age : 35, type : "4"}]); BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 2, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
制造测试数据: db.study.insert({name : "小明", age : 18, type : "1"}); db.study.insert({name : "小陈", age : 19, type : "1"}); db.study.insert({name : "小赵", age : 18, type : "1"}); db.study.insert({name : "小钱", age : 17, type : "1"}); db.study.insert({name : "小孙", age : 20, type : "1"}); db.study.insert({name : "小李", age : 18, type : "1"}); db.study.insert({name : "小马", age : 19, type : "1"}); db.study.insert({name : "小红", age : 18, type : "2"}); db.study.insert({name : "小芳", age : 18, type : "2"}); db.study.insert({name : "赵老师", age : 30, type : "3"}); db.study.insert({name : "钱老师", age : 31, type : "3"}); db.study.insert({name : "孙老师", age : 30, type : "3"}); db.study.insert({name : "李老师", age : 32, type : "3"}); db.study.insert([{name : "王校长", age : 35, type : "4"}, {name : "马校长", age : 35, type : "4"}]);
6、查看数据
- 查看所有数据
> db.study.find()
{ "_id" : ObjectId("60b72423d8f397500860a466"), "a" : "1", "b" : 2, "type" : "1" }
- 根据属性查询
db.study.find({age: 30}) { "_id" : ObjectId("60b726540e8e53d3b7246f1a"), "name" : "赵老师", "age" : 30, "type" : "3" } { "_id" : ObjectId("60b726540e8e53d3b7246f1c"), "name" : "孙老师", "age" : 30, "type" : "3" }
- in条件查询
db.study.find({ age: { $in: [ 30 ,32] } }) > db.study.find({ age: { $in: [ 30 ,32] } }) { "_id" : ObjectId("60b726540e8e53d3b7246f1a"), "name" : "赵老师", "age" : 30, "type" : "3" } { "_id" : ObjectId("60b726540e8e53d3b7246f1c"), "name" : "孙老师", "age" : 30, "type" : "3" } { "_id" : ObjectId("60b726550e8e53d3b7246f1d"), "name" : "李老师", "age" : 32, "type" : "3" }
- 小于条件查询
db.study.find({ age: { $lt: 18} }) > db.study.find({ age: { $lt: 18} }) { "_id" : ObjectId("60b726530e8e53d3b7246f14"), "name" : "小钱", "age" : 17, "type" : "1" }
其它比较符号
$eq
匹配等于指定值的值。
$gt
匹配大于指定值的值。
$gte
匹配大于或等于指定值的值。
$in
匹配数组中指定的任何值。
$lt
匹配小于指定值的值。
$lte
匹配小于或等于指定值的值。
$ne
匹配所有不等于指定值的值。
$nin
不匹配数组中指定的任何值。
- Or条件查询
db.study.find({ $or: [ { age: 18 }, { age: { $gt: 32} } ] })
年龄为18或者年龄大于32的 > db.study.find({ $or: [ { age: 18 }, { age: { $gt: 32} } ] }) { "_id" : ObjectId("60b72565d8f397500860a467"), "name" : "王校长", "age" : 35, "type" : "4" } { "_id" : ObjectId("60b725e70e8e53d3b7246f0f"), "name" : "王校长", "age" : 35, "type" : "4" } { "_id" : ObjectId("60b725e70e8e53d3b7246f10"), "name" : "马校长", "age" : 35, "type" : "4" } { "_id" : ObjectId("60b7264f0e8e53d3b7246f11"), "name" : "小明", "age" : 18, "type" : "1" } { "_id" : ObjectId("60b726530e8e53d3b7246f13"), "name" : "小赵", "age" : 18, "type" : "1" } { "_id" : ObjectId("60b726530e8e53d3b7246f16"), "name" : "小李", "age" : 18, "type" : "1" } { "_id" : ObjectId("60b726540e8e53d3b7246f18"), "name" : "小红", "age" : 18, "type" : "2" } { "_id" : ObjectId("60b726540e8e53d3b7246f19"), "name" : "小芳", "age" : 18, "type" : "2" }
- and查询再加上Or条件查询
-
db.study.find({ age:18, $or: [ { name: "小明" }, { name: "小芳" } ] })
> db.study.find({ age:18, $or: [ { name: "小明" }, { name: "小芳" } ] }) { "_id" : ObjectId("60b7264f0e8e53d3b7246f11"), "name" : "小明", "age" : 18, "type" : "1" } { "_id" : ObjectId("60b726540e8e53d3b7246f19"), "name" : "小芳", "age" : 18, "type" : "2" }
- like查询(正则表达式)
右边Like查询
以【王】开头,如like '王%'
db.study.find({ name: /^王/})
左边Like查询
以【校长】结尾,如like '%校长'
db.study.find({ name: /校长$/}) > db.study.find({ name: /校长$/}) { "_id" : ObjectId("60b72565d8f397500860a467"), "name" : "王校长", "age" : 35, "type" : "4" } { "_id" : ObjectId("60b725e70e8e53d3b7246f0f"), "name" : "王校长", "age" : 35, "type" : "4" } { "_id" : ObjectId("60b725e70e8e53d3b7246f10"), "name" : "马校长", "age" : 35, "type" : "4" }
- 分页查询
> db.study.find({age: 30}).limit(1)
{ "_id" : ObjectId("60b726540e8e53d3b7246f1a"), "name" : "赵老师", "age" : 30, "type" : "3" }
db.study.find().skip(2).limit(2);
skip为跳过的offset,如查询ID为21-30的数据,则是db.study.find().skip(20).limit(10);,跳过前面20条数据后取10条数据
格式是:
db.study.find().skip((currentPage-1) *pageSize).limit(pageSize);
- 排序(升序或者倒序)
db.study.find().skip(2).limit(2).sort({age: 1}); db.study.find().limit(10).sort({age: -1, name : 1}); db.study.find().sort({age: -1, name : 1}).limit(10); db.study.find().sort({age: -1, name : 1}).limit(10).skip(5);
1表示升序,-1表示降序
sort,limit,skip顺序随便放。
7、更新update
db.collection.updateOne() New in version 3.2
db.collection.updateMany() New in version 3.2
db.collection.replaceOne() New in version 3.2
将名称
{ "_id" : ObjectId("60b72565d8f397500860a467"), "name" : "王校长", "age" : 35, "type" : "4" }
更新为朱校长
更新数据(一定要使用$set,不然更新后,只剩下这个属性。)
db.study.updateOne({ _id : ObjectId("60b72565d8f397500860a467")}, {$set: {name : "朱校长"}}) > db.study.updateOne({ _id : ObjectId("60b72565d8f397500860a467")}, {$set: {name : "朱校长"}}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
更新后查询验证:
db.study.find({ _id : ObjectId("60b72565d8f397500860a467")}); > db.study.find({ _id : ObjectId("60b72565d8f397500860a467")}); { "_id" : ObjectId("60b72565d8f397500860a467"), "name" : "朱校长", "age" : 35, "type" : "4" }
更新数据(不加$set)
db.study.updateOne({ "_id" : ObjectId("60b72565d8f397500860a467")}, {name : "朱校长2"}) > db.study.updateOne({ "_id" : ObjectId("60b72565d8f397500860a467")}, {name : "朱校长2"}) uncaught exception: Error: the update operation document must contain atomic operators : DBCollection.prototype.updateOne@src/mongo/shell/crud_api.js:565:19
8、更新,$inc 对数字增减
//小赵年龄加一岁 db.study.update({_id: ObjectId("60b726530e8e53d3b7246f13")}, {$inc : {age: 1}}); //小赵年龄减3岁 db.study.update({_id: ObjectId("60b726530e8e53d3b7246f13")}, {$inc : {age: -3}});
七、MongoDB连接参数说明
标准连接语法:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
mongodb://
一个必需的前缀,用于标识这是标准连接格式中的字符串。
username:password@
可选的。身份验证凭据。
如果指定,客户端将尝试向authSource. 如果 authSource未指定,客户端将尝试向defaultauthdb. 如果defaultauthdb未指定,则到admin 数据库。
host[:port]
运行mongod实例(或分片mongos集群的实例)的主机(和可选端口号) 。您可以指定主机名、IP 地址或 UNIX 域套接字。为您的部署拓扑指定尽可能多的主机:
对于独立的,指定独立mongod实例的主机名 。
对于副本集,指定mongod 副本集配置中列出的实例的主机名。
对于分片集群,指定mongos实例的主机名 。
如果未指定端口号,27017 则使用默认端口。
/defaultauthdb
可选的。如果连接字符串包含username:password@ 身份验证凭据但未authSource指定选项,则要使用的身份验证数据库。
如果两个authSource和defaultauthdb未指定,客户端将尝试以指定用户的身份验证admin数据库。
?<options>
可选的。将连接特定选项指定为<name>=<value>成对的查询字符串。有关这些选项的完整说明,请参阅 连接字符串选项。
如果连接字符串未指定数据库/您必须/在最后一个host和?开始选项字符串的问号 ( )之间指定斜线 ( ) 。
options连接选项是成对的,形式如下:name=value.
name使用驱动程序时,该选项不区分大小写。
name使用 4.2 或更高版本的mongoshell时,该选项不区分大小写。
name使用 4.0 及更早版本的mongoshell时,该选项区分大小写。
value始终是区分大小写的。
MongoDB连接options参数:
replicaSet
指定的名称副本集,如果 mongod是副本集的成员。
连接到副本集时,向uri的组件提供副本集成员的种子列表host[:port]。有关特定详细信息,请参阅您的驱动程序 文档。
mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl
tls
为连接启用或禁用 TLS/SSL(4.2版中的新功能。):
true: 启动与 TLS/SSL 的连接。DNS 种子列表连接格式的默认设置 。
false:在没有 TLS/SSL 的情况下启动连接。标准连接字符串格式的默认值 。
mongodb://db0.example.com,db1.example.com,db2.example.com/?replicaSet=myRepl&tls=true
或者,您也可以使用等效ssl=true选项:
mongodb://db0.example.com,db1.example.com,db2.example.com/?replicaSet=myRepl&ssl=true
tlsCertificateKeyFile
指定.pem包含客户端的 TLS/SSL X.509 证书或客户端的 TLS/SSL 证书和密钥的本地文件的位置。
客户端将此文件提供给 mongod/mongos实例。
改变版本4.4:mongod/mongos如果出现的X.509证书内到期登录连接警告30 的日子mongod/mongos主机系统的时间。有关更多信息,请参阅 x.509 证书即将到期触发警告。
并非所有驱动程序都支持此选项。请参阅 驱动程序文档。
此连接字符串选项不适用于mongo shell。请改用命令行选项。
4.2版中的新功能。
tlsCertificateKeyFilePassword
指定用于解密 tlsCertificateKeyFile.
并非所有驱动程序都支持此选项。请参阅 驱动程序文档。
此连接字符串选项不适用于mongo shell。请改用命令行选项。
4.2版中的新功能。
connectTimeoutMS
超时前尝试连接的时间(以毫秒为单位)。默认是永不超时,但不同的驱动程序可能会有所不同。
socketTimeoutMS
在尝试超时之前尝试在套接字上发送或接收的时间(以毫秒为单位)。默认是永不超时,但不同的驱动程序可能会有所不同。
compressors
逗号分隔的压缩器字符串,用于启用网络压缩以在此客户端和mongod/mongos 实例之间进行通信。
您可以指定以下压缩器:
snappy
zlib(在 MongoDB 3.6 或更高版本中可用)
zstd(在 MongoDB 4.2 或更高版本中可用)
如果您指定多个压缩器,那么您列出压缩器的顺序和通信发起者一样重要。例如,如果客户端指定以下网络压缩器"zlib,snappy"并mongod指定 "snappy,zlib", 客户端和mongod使用之间的消息 zlib。
zlibCompressionLevel
如果使用zlib for ,则指定压缩级别的整数 network compression。
您可以指定范围从-1到的整数值9:
-1:默认压缩级别,通常是级别6压缩。
0:无压缩
1 - 9:提高压缩级别,但以速度为代价,具有:1 提供最佳速度但最少压缩,以及9 提供最好的压缩,但速度最慢。
maxPoolSize
连接池中的最大连接数。默认值为100。
minPoolSize
连接池中的最小连接数。默认值为0。
minPoolSize并非所有驱动程序都支持该选项。有关驱动程序的信息,请参阅 驱动程序文档。
maxIdleTimeMS
连接在被移除和关闭之前可以在池中保持空闲的最大毫秒数。
并非所有驱动程序都支持此选项。
waitQueueMultiple
驱动程序将该maxPoolSize 值乘以的数字,以提供允许等待连接从池中可用的最大线程数。有关默认值,请参阅驱动程序 文档。
并非所有驱动程序都支持此选项。
waitQueueTimeoutMS
线程可以等待连接变为可用的最长时间(以毫秒为单位)。有关默认值,请参阅 驱动程序文档。
并非所有驱动程序都支持此选项。
w
对应于写关注wOption。该w选项请求确认写入操作已传播到指定数量的mongod实例或 mongod具有指定标签的实例。
您可以指定 a number、字符串majority或 a tag set。
wtimeoutMS
对应写关注wtimeout。 wtimeoutMS指定写入问题的时间限制(以毫秒为单位)。
当wtimeoutMSis 时0,写操作永远不会超时。有关更多信息,请参阅wtimeout。
journal
对应于写关注j选项选项。该 journal选项请求 MongoDB 确认写入操作已写入 日志。有关详细信息,请参阅j选项。
如果设置journal为true,并指定一个w小于 1的 值,journal则以。
如果您设置journal为 true,并且 mongod没有启用storage.journal.enabled日记功能(如 ) ,那么 MongoDB 将出错。
readConcernLevel
隔离级别。可以接受以下值之一:
- local
- majority
- linearizable
- available
此连接字符串选项不适用于 mongoshell。将读取问题指定为特定操作的 选项。
(时间宝贵,分享不易,捐赠回馈,^_^)
================================
©Copyright 蕃薯耀 2021-06-18
https://www.cnblogs.com/fanshuyao/