课堂实验:MangoDB操作
实验目的
掌握MongoDB各项查询命令
实验原理
面向文档的NoSQL数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能。
MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
由于MongoDB可以支持复杂的数据结构,而且带有强大的数据查询功能,因此很多项目都考虑用MongoDB来代替MySQL等传统数据库来实现不是特别复杂的Web应用。由于数据量实在太大,所以迁移到了MongoDB上面,数据查询的速度得到了非常显著的提升。
实验环境
Linux Ubuntu 14.04
jdk-7u75-linux-x64
mongodb-linux-x86_64-3.4.2.tgz
实验内容
1.使用find或者findOne函数和查询文档
2.MongoDB 条件查询
3.MongoDB AND和OR查询
4.MongoDB $type 操作符
5.MongoDB 正则表达式
实验步骤
1.启动MongoDB shell。
numactl --interleave=all mongod -config /apps/mongodb/bin/mongodb.conf mongo
2.切换到admin数据库,使用root账户。
db.auth('root','strongs')
3.插入实验数据。
db.mycollection.insert({'username':'zhangyu','age':13,'salary':500}); db.mycollection.insert({'username':'zhangyu','age':13,'salary':500}); db.mycollection.insert({'username':'laohu','age':20,'salary':200}); db.mycollection.insert({'username':'banma','age':13,'salary':300}); db.mycollection.insert({'username':'xiongmao','age':8,'salary':300});
4.统计集合中数据条数。
db.mycollection.count()
5.MongoDB中使用find来进行查询,查询就是返回一个集合中的子集,子集的范围从0到整个集合。find的第一个参数决定了要返回哪些子集,其形式也是一个集合。
空的文档查询会匹配集合的全部内容,要是不指定查询文档,默认就是{}。
db.mycollection.find()
6.查询第一条数据。
db.mycollection.findOne()
注意,findOne中的O要大写。
7.查询第1条以后的所有数据。
db.mycollection.find().skip(1)
8.跳过第2条,查询后两条数据。
db.mycollection.find().limit(2).skip(2)
这条命令可用于分页,Limit是pageSize,Skip是第几页*pageSize
9.限定查询3条数据。
db.mycollection.find().limit(3)
10.查询结果集的记录数。(查询salary小于300或大于400的个数)
db.mycollection.find({$or:[{salary:{$lt:300}},{salary:{$gt:400}}]}).count()
查询指定列的数据。可以通过find(或者findOne)的第二个参数来指定想要的键,这样做既会节省传输的数据量,又能节省客户端解码文档的时间和内存消耗。
11.查询mycollection集合中,'age'列和'salary'列。
db.mycollection.find({},{age:1,salary:1})
1表示显示此列的意思,也可以用true表示。
12.按salary升序排序。(将1换成-1就是降序排序)
db.mycollection.find().sort({salary:1})
13.查询username列,并去掉重复数据。
db.mycollection.distinct('username')
MongoDB与RDBMS中Where语句的比较:
14.查询age等于13的数据。
db.mycollection.find({'age':13})
15.查询age小于13的数据。
db.mycollection.find({age:{$lt:13}})
16.查询age大于15的数据。
db.mycollection.find({age:{$gt:15}})
17.查询age不等于13的数据。
db.mycollection.find({'age':{$ne:13}})
MongoDB AND条件
MongoDB 的find() 方法可以传入多个键(key),每个键(key)以逗号隔开。语法格式如下:
db.col.find({key1:value1, key2:value2})
18.查询age等于20,salary等于200的数据。
db.mycollection.find({'age':20,'salary':200})
19.查询age小于13,salary大于等于200的数据。
db.mycollection.find({$and:[{age:{$lt:13}},{salary:{$gte:200}}]})
MongoDB OR条件
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } )
20.查询salary大于300或age小于等于13的数据。
db.mycollection.find({$or:[{salary:{$gt:300}},{age:{$lte:13}}]})
AND和OR联合使用
21.查询salary大于等于300时,username为'banma'或者age为8的数据,类似的常规 SQL 语句为:where salary>=300 and (username = 'banma' or age = 8)
db.mycollection.find({'salary': {$gte:300}, $or: [{'username': 'banma'},{'age': 8}]})
MongoDB $type 操作符
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
MongoDB 中可以使用的类型如下表所示:
22.获取mycollection集合中username为String类型的数据。
db.mycollection.find({'username':{$type:2}})
MongoDB 正则表达式
正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
23.查询username中包含‘m’的数据。
db.mycollection.find({username:/m/})
24.查询以z开头的数据。
db.mycollection.find({username:/^z/})
至此,实验结束!