【大数据存储与处理】实验三 MongoDB 数据库操作

发布时间:2023年12月20日

实验三?MongoDB?数据库操作?

【实验目的】:?

1.?掌握?MongoDB?数据库的基本概念?

2.?掌握?MongoDB?创建数据库?

3.?掌握?MongoDB?删除数据库?

【实验内容与要求】:?

MongoDB?是一个开源文档数据库,提供高性能,高可用性和自动扩展,旨在为?WEB?

应用提供可扩展的高性能数据存储解决方案。?

MongoDB?中的记录是一个文档,它是由字段和值(key=>value)对组成的数据结构。?

MongoDB?文档与?JSON?对象相似。?字段的值可能包括其他文档,数组和文档数组。?

在?mongodb?中基本的概念是文档(document)、集合(collection)、数据库(database)。?

SQL?术语/概念?MongoDB?术语/概念?

解释/说明?

database?

database?

数据库?

table?

collection?

数据库表/集合?

row?

document?

数据记录行/文档?

column?

field?

数据字段/域?

index?

index?

索引?

table?joins?

表连接,MongoDB?不支持?

primary?key?

primary?key?

主键,MongoDB?自动将_id?字段?

设置为主键?

例如:?

启动集群服务:?

master?节点?1——192.168.226.132《大数据存储与处理》实验指导书?

mongod?-f?/home/app/mongodb/master.conf?

slave1?节点?2——192.168.226.130:?

mongod?-f?/home/app/mongodb/slave1.conf?

arbiter?节点?3——192.168.226.131:?

mongod?-f?/home/app/mongodb/arbiter.conf?

执行?mongo?192.168.226.132?命令进入?mongodb?shell?

关闭?mongodb?务必使用关闭服务命令:?

master?节点?1——192.168.226.132:?

mongod?--journal?--shutdown?-f?/home/app/mongodb/master.conf?

slave1?节点?2——192.168.226.130:?

mongod?--journal?--shutdown?-f?/home/app/mongodb/slave1.conf?

arbiter?节点?3——192.168.226.131:?

mongod?--journal?--shutdown?-f?/home/app/mongodb/arbiter.conf?

题目?0:进入?mongodb?shell?

执行?mongo?192.168.226.132?命令进入?mongodb?shell(注意这里?mongod?的服务已经启?

动)?

题目一:MongoDB?创建数据库?

MongoDB?创建数据库的语法格式如下:?

use?“DATABASE_NAME”?

如果数据库不存在,则创建数据库,否则切换到指定数据库。?

例如:以下示例创建了数据库use?Employee:?

-?25?-《大数据存储与处理》实验指导书?

如果想查看所有数据库,可以使用?show?dbs?命令:?

可以看到,刚创建的数据库?Employee?并不在数据库的列表中,?要显示它,需要向?

Employee?数据库插入一些数据。?

MongoDB?中默认的数据库为?test,如果没有创建新的数据库,集合将存放在?test?数据?

库中。?

题目二:MongoDB?删除数据库?

MongoDB?删除数据库的语法格式如下:?

db.dropDatabase()?

删除当前数据库,默认为?test,可以使用?db?命令查看当前数据库名。?

首先,使用?show?dbs?查看所有数据库,然后用?use?切换到数据库?Employee,再进行删?

除操作,最后使用?show?查看数据库是否删除成功,操作步骤如图所示:

题目三:集合操作?

1.?创建集合的方法?

命令格式:db.createCollection(name,?options)?

例如在?myDB?数据库下创建?myCollection?集合,?

执行以下命令:?

db.createCollection("myCollection")?

查询数据库中所有的集合使用?show?collections,?

对集合重命名使用?renameCollection?方法,如下图所示:?

删除集合使用?drop?方法,参考上图。?

相关操作:?

1)插入数据?

db.myColl.insert({'username':'zhangyu','age':13,'salary':500});?

db.myColl.insert({'username':'zhangyu','age':13,'salary':500});?

db.myColl.insert({'username':'laohu','age':20,'salary':200});?

db.myColl.insert({'username':'banma','age':13,'salary':300});?

db.myColl.insert({'username':'xiongmao','age':8,'salary':300});?

2)统计集合中数据条数。?

db.myColl.count()?

3)查询第一条数据。?

db.myColl.findOne()?

注意,findOne?中的?O?要大写。?

4)查询第?1?条以后的所有数据。?

db.?myColl.find().skip(1)?

5)跳过第?2?条,查询后两条数据。?

db.?myColl.find().limit(2).skip(2)?

6)限定查询?3?条数据。?

db.?myColl.find().limit(3)?

7)查询结果集的记录数。(查询?salary?小于?300?或大于?400?的个数)?

db.?myColl.find({$or:[{salary:{$lt:300}},{salary:{$gt:400}}]}).count()?

8)查询指定列的数据。可以通过?find(或者?findOne)的第二个参数来指定想要的键,?

这样做既会节省传输的数据量,又能节省客户端解码文档的时间和内存消耗。?

查询?myColl?集合中,'age'列和'salary'列。?

db.mycollection.find({},{age:1,salary:1})?

1?表示显示此列的意思,也可以用?true?表示。?

9)按?salary?升序排序。(将?1?换成-1?就是降序排序)?

db.?myColl.find().sort({salary:1})?

10)查询?username?列,并去掉重复数据。?

db.?myColl.distinct('username')?

11)查询?age?等于?13?的数据。?

db.?myColl.find({'age':13})?

12)查询?age?小于?13?的数据。?

db.?myColl.find({age:{$lt:13}})?

13)查询?age?大于?15?的数据。?

db.?myColl.find({age:{$gt:15}})?

14)查询?age?不等于?13?的数据。?

db.?myColl.find({'age':{$ne:13}})?

MongoDB?AND?条件?

MongoDB?的?find()?方法可以传入多个键(key),每个键(key)以逗号隔开。语法格式如下:?

db.col.find({key1:value1,?key2:value2})?

15)查询?age?等于?20salary?等于?200?的数据。?

db.?myColl.find({'age':20,'salary':200})?

16)查询?age?小于?13salary?大于等于?200?的数据。?

db.?myColl.find({$and:[{age:{$lt:13}},{salary:{$gte:200}}]})?

17MongoDB?OR?条件?

MongoDB?OR?条件语句使用了关键字?$or,语法格式如下:?

db.col.find(?{?$or:?[?{key1:?value1},?{key2:value2}?]?}?)?

18)查询?salary?大于?300?或?age?小于等于?13?的数据。?

db.?myColl.find({$or:[{salary:{$gt:300}},{age:{$lte:13}}]})?

19AND?和?OR?联合使用。?

查询?salary?大于等于?300?时,username?'banma'或者?age?为?8?的数据,类似的常规?SQL?

语句为:where?salary>=300?and?(username?=?'banma'?or?age?=?8)?

db.?myColl.find({'salary':?{$gte:300},?$or:?[{'username':?'banma'},{'age':?8}]})?

20ongoDB?$type?操作符?

$type?操作符是基于?BSON?类型来检索集合中匹配的数据类型,并返回结果。?

MongoDB?中可以使用的类型如下表所示:?

获取?myColl?集合中?username?为?String?类型的数据。?

21MongoDB?正则表达式?

正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。?

查询?username?中包含‘m’的数据。

db.?myColl.find({username:/m/})?

22)查询以?z?开头的数据。?

题目四?使用游标和?printjson?输出?testdb?数据库?c3?集合中所有结果集。?

var?cursor?=?db.c3.find()?

while(cursor.hasNext()){printjson(cursor.next())}?

题目五?MongoDB?python?编程。?

(1)?python?编程访问?MongoDB?中的?mytest?数据库,判断集合?employs?是否?

存在,如果?employs?存在,输出集合已存在!,否则输出集合不存在!”?

import?pymongo?

myclient?=?pymongo.MongoClient('mongodb://192.168.126.140:27017/')?

mydb?=?myclient["testdb"]?

collist?=?mydb.list_collection_names()?

if?"employs"?in?collist:?

print("集合已存在!")?

else:?

print("集合不存在!")?

(2)Python?编程修改?testdb?数据库中?sales?集合中“_id”为?3?的文档中?price?键?

的值修改为?20,并打印出该条文档。?

import?pymongo?

myclient?=?pymongo.MongoClient("mongodb://192.168.126.140:27017/")?

mydb?=?myclient["testdb"]?

mycol?=?mydb["sales"]?

myquery?=?{?"_id":?3?}?

newvalues?=?{?"$set":?{?"price":?20?}?}?

mycol.update_one(myquery,?newvalues)?

for?x?in?mycol.find({"_id":3}):?

print(x)?

思考题:MongoDB?集群安装模式有哪些?各有什么特点??

小结?

掌握?MongoDB?数据库的基本概念,掌握?MongoDB?创建数据库,掌握?MongoDB?删除?

数据库。

文章来源:https://blog.csdn.net/qq_42531954/article/details/135102693
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。