MongoDB安装和使用,MongoDB Like查询,Or查询,分页查询

Posted 蕃薯耀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/

 

以上是关于MongoDB安装和使用,MongoDB Like查询,Or查询,分页查询的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB的模糊查询操作(类关系型数据库的 like 和 not like)

如何使“LIKE”查询在 MongoDB 中工作?

对mongodb中的数字进行sql'like'操作

MongoDB Aggregation SQL Union 和 SQL Exists like 子句

如何在 mongoDB 中进行 LIKE? [复制]

MongoDB 等价于 SQL“NOT LIKE”查询