大数据学习
bigdata learning
Toggle navigation
大数据学习
主页
openGauss数据库
Flume
MongoDB
Hadoop
数据库实验
Kafka
Zookeeper
Hbase
Manual
Spark
Neo4j
InfluxDB
RabbitMQ
Flink
About Me
归档
标签
04-MongoDB连接及基本命令
MongoDB
2024-04-17 09:59:39
26
0
0
bigdata
MongoDB
# 启动 MongoDB 服务 在前面的教程中,我们已经讨论了[如何启动 MongoDB 服务](https://www.runoob.com/mongodb/mongodb-window-install.html),你只需要在 MongoDB 安装目录的 bin 目录下执行 **mongodb** 即可。 执行启动操作后,mongodb 在输出一些必要信息后不会输出任何信息,之后就等待连接的建立,当连接被建立后,就会开始打印日志信息。 你可以使用 MongoDB shell 来连接 MongoDB 服务器。你也可以使用 PHP 来连接 MongoDB。本教程我们会使用 MongoDB shell 来连接 Mongodb 服务,之后的章节我们将会介绍如何通过 php 来连接 MongoDB 服务。 标准 URI 连接语法: ``` mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] ``` * **mongodb://** 这是固定的格式,必须要指定。 * **username:password@** 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库 * **host1** 必须的指定至少一个 host, host1 是这个 URI 唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。 * **portX** 可选的指定端口,如果不填,默认为 27017 * **/database** 如果指定 username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。 * **?options** 是连接选项。如果不使用 / database,则前面需要加上 /。所有连接选项都是键值对 name=value,键值对之间通过 & 或;(分号)隔开 标准的连接格式包含了多个选项 (options),如下所示: <table><tbody><tr><th>选项</th><th>描述</th></tr><tr><td>replicaSet=name</td><td>验证 replica set 的名称。 Impliesconnect=replicaSet.</td></tr><tr><td>slaveOk=true|false</td><td><ul><li>true: 在 connect=direct 模式下,驱动会连接第一台机器,即使这台服务器不是主。在 connect=replicaSet 模式下,驱动会发送所有的写请求到主并且把读取操作分布在其他从服务器。</li><li>false: 在 connect=direct 模式下,驱动会自动找寻主服务器. 在 connect=replicaSet 模式下,驱动仅仅连接主服务器,并且所有的读写命令都连接到主服务器。</li></ul></td></tr><tr><td>safe=true|false</td><td><ul><ul><li>true: 在执行更新操作之后,驱动都会发送 getLastError 命令来确保更新成功。(还要参考 wtimeoutMS).</li></ul></ul>false: 在每次更新之后,驱动不会发送 getLastError 来确保更新成功。</td></tr><tr><td>w=n</td><td>驱动添加 {w : n} 到 getLastError 命令. 应用于 safe=true。</td></tr><tr><td>wtimeoutMS=ms</td><td>驱动添加 {wtimeout : ms} 到 getlasterror 命令. 应用于 safe=true.</td></tr><tr><td>fsync=true|false</td><td><ul><li>true: 驱动添加 {fsync : true} 到 getlasterror 命令. 应用于 safe=true.</li><li>false: 驱动不会添加到 getLastError 命令中。</li></ul></td></tr><tr><td>journal=true|false</td><td>如果设置为 true, 同步到 journal (在提交到数据库前写入到实体中). 应用于 safe=true</td></tr><tr><td>connectTimeoutMS=ms</td><td>可以打开连接的时间。</td></tr><tr><td>socketTimeoutMS=ms</td><td>发送和接受 sockets 的时间。</td></tr></tbody></table> ## 实例 使用默认端口来连接 MongoDB 的服务。 ``` mongodb://localhost ``` 通过 shell 连接 MongoDB 服务: ``` $ ./mongo MongoDB shell version: 4.0.9 connecting to: test ... ``` 这时候你返回查看运行 **./mongod** 命令的窗口,可以看到是从哪里连接到 MongoDB 的服务器,您可以看到如下信息: ``` ……省略信息…… 2015-09-25T17:22:27.336+0800 I CONTROL [initandlisten] allocator: tcmalloc 2015-09-25T17:22:27.336+0800 I CONTROL [initandlisten] options: { storage: { dbPath: "/data/db" } } 2015-09-25T17:22:27.350+0800 I NETWORK [initandlisten] waiting for connections on port 27017 2015-09-25T17:22:36.012+0800 I NETWORK [initandlisten] connection accepted from 127.0.0.1:37310 #1 (1 connection now open) # 该行表明一个来自本机的连接 ……省略信息…… ``` # MongoDB 连接命令格式 使用用户名和密码连接到 MongoDB 服务器,你必须使用 '**username:password@hostname/dbname**'格式,'username'为用户名,'password' 为密码。 使用用户名和密码连接登录到默认数据库: ``` $ ./mongo MongoDB shell version: 4.0.9 connecting to: test ``` 使用用户 admin 使用密码 123456 连接到本地的 MongoDB 服务上。输出结果如下所示: ``` > mongodb://admin:123456@localhost/ ... ``` 使用用户名和密码连接登录到指定数据库,格式如下: ``` mongodb://admin:123456@localhost/test ``` ## 更多连接实例 连接本地数据库服务器,端口是默认的。 ``` mongodb://localhost ``` 使用用户名 fred,密码 foobar 登录 localhost 的 admin 数据库。 ``` mongodb://fred:foobar@localhost ``` 使用用户名 fred,密码 foobar 登录 localhost 的 baz 数据库。 ``` mongodb://fred:foobar@localhost/baz ``` 连接 replica pair, 服务器 1 为 example1.com 服务器 2 为 example2。 ``` mongodb://example1.com:27017,example2.com:27017 ``` 连接 replica set 三台服务器 (端口 27017, 27018, 和 27019): ``` mongodb://localhost,localhost:27018,localhost:27019 ``` 连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器。 ``` mongodb://host1,host2,host3/?slaveOk=true ``` 直接连接第一个服务器,无论是 replica set 一部分或者主服务器或者从服务器。 ``` mongodb://host1,host2,host3/?connect=direct;slaveOk=true ``` 当你的连接服务器有优先级,还需要列出所有服务器,你可以使用上述连接方式。 安全模式连接到 localhost: ``` mongodb://localhost/?safe=true ``` 以安全模式连接到 replica set,并且等待至少两个复制服务器成功写入,超时时间设置为 2 秒。 ``` mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000 ``` # MongoDB使用Shell ## shell命令模式 输入如下命令进入MongoDB的shell命令模式: ```bash mongo ``` 默认连接的数据库是test数据库,在此之前一定要确保你已经启动了MongoDB,否则会出现错误,启动之后运行成功,如下截图:  ## 常用操作命令 数据库相关 show dbs:显示数据库列表 show collections:显示当前数据库中的集合(类似关系数据库中的表table) show users:显示所有用户 use yourDB:切换当前数据库至yourDB db.help() :显示数据库操作命令 db.yourCollection.help() :显示集合操作命令,yourCollection是集合名 MongoDB没有创建数据库的命令,如果你想创建一个“School”的数据库,先运行use School命令,之后做一些操作(如:创建聚集集合db.createCollection('teacher')),这样就可以创建一个名叫“School”的数据库。截图如下:  下面以一个School数据库为例,在School数据库中创建两个集合teacher和student,并对student集合中的数据进行增删改查基本操作(集合Collection相当于关系型数据库中的表table)。 1、切换到School数据库 ```bash use School #切换到School数据库。MongoDB 无需预创建School数据库,在使用时会自动创建 ``` 2、创建Collection ```bash db.createCollection('teacher') #创建一个聚集集合。MongoDB 其实在插入数据的时候,也会自动创建对应的集合,无需预定义集合 ``` 截图如下:  3、插入数据 与数据库创建类似,插入数据时也会自动创建集合。 插入数据有两种方式:insert和save。 ```bash db.student.insert({_id:1, sname: 'zhangsan', sage: 20}) #_id可选 db.student.save({_id:1, sname: 'zhangsan', sage: 22}) #_id可选 ``` 这两种方式,其插入的数据中_id字段均可不写,会自动生成一个唯一的_id来标识本条数据。而insert和save不同之处在于:在手动插入_id字段时,如果_id已经存在,insert不做操作,save做更新操作;如果不加_id字段,两者作用相同都是插入数据。截图如下:  添加的数据其结构是松散的,只要是bson格式均可,列属性均不固定,根据添加的数据为准。先定义数据再插入,就可以一次性插入多条数据,截图如下:  运行完以上例子,student 已自动创建,这也说明 MongoDB 不需要预先定义 collection ,在第一次插入数据后,collection 会自动的创建。截图如下:  3、查找数据 db.youCollection.find(criteria, filterDisplay) criteria :查询条件,可选 filterDisplay:筛选显示部分数据,如显示指定列数据,可选(当选择时,第一个参数不可省略,若查询条件为空,可用{}做占位符,如下例第三句) ```bash db.student.find() #查询所有记录。相当于:select * from student db.student.find({sname: 'lisi'}) #查询sname='lisi'的记录。相当于: select * from student where sname='lisi' db.student.find({},{sname:1, sage:1}) #查询指定列sname、sage数据。相当于:select sname,sage from student。sname:1表示返回sname列,默认_id字段也是返回的,可以添加_id:0(意为不返回_id)写成{sname: 1, sage: 1,_id:0},就不会返回默认的_id字段了 db.student.find({sname: 'zhangsan', sage: 22}) #and 与条件查询。相当于:select * from student where sname = 'zhangsan' and sage = 22 db.student.find({$or: [{sage: 22}, {sage: 25}]}) #or 条件查询。相当于:select * from student where sage = 22 or sage = 25 ``` 查询操作类似,这里只给出db.student.find({sname: 'lisi'})查询的截图,如下:  db.youCollection.find(criteria, filterDisplay).pretty()表示格式化输出,截图如下:  4、修改数据 db.youCollection.update(criteria, objNew, upsert, multi ) criteria: update的查询条件,类似sql update查询内where后面的 objNew : update的对象和一些更新的操作符(如$set)等,也可以理解为sql update查询内set后面的。 upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。 multi: mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。默认false,只修改匹配到的第一条数据。 其中criteria和objNew是必选参数,upsert和multi可选参数 举例如下: ```bash db.student.update({sname: 'lisi'}, {$set: {sage: 30}}, false, true) #相当于:update student set sage =30 where sname = 'lisi'; ``` 操作截图如下:  5、删除数据 ```bash db.student.remove({sname: 'chenliu'}) #相当于:delete from student where sname='chenliu' ``` 操作截图如下:  6、删除集合 ```bash db.student.drop() ``` 操作截图如下:  7、退出shell命令模式 输入exit或者Ctrl+C退出shell命令模式 注意:MongoDB相较安全性更偏向易用性,默认是没有开启用户权限的,如果想开启用户权限,可以参考Ubuntu下开启MongoDB用户权限。
上一篇:
04-Kafka多代理配置
下一篇:
04-Neo4j-MATCH 命令
文档导航