一、MongoDB创建数据库
#切换到zhang数据库下
use zhang
#查看当前数据库为哪个数据库
db
#在当前数据库下,创建一个集合,我们在集合中插入一些数据
db.test.insert({"name":"小飞侠"})
注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
二、MongoDB删除数据库
#查看当前数据库
db
#删除当前的数据库
db.dropDatabase()
三、MongoDB查看数据库
#查看所有的数据库
show dbs
四、MongoDB 集合操作
use test
#创建集合
db.runoo.insert({"name":"你好啊"})
#显示所有的集合
show tables
#删除一个集合
db.runoo.drop()
---------------------------------------------------添加集合中的内容
#创建一个col集合并且插入数据
db.col.insert({
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
})
---------------------------------------------------删除集合中的内容
#删除col集合中的内容
db.col.remove({})
##删除标题title为MongoDB 教程的数据
db.col.remove({'title':'MongoDB'})
---------------------------------------------------修改集合中的内容
#修改标题为MongoDB的标题 修改为MongoDB教程 默认修改一条
db.col.update({'title':'MongoDB'},{$set:{'title':'MongoDB教程'}})
#如果要修改全部的话使用这个
db.col.update({'title':'MongoDB教程'},{$set:{'title':'MongoDB'}},{multi:true})
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
4.1查询集合
语法:db.collection.find(query, projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
若不指定 projection,则默认返回所有键,指定 projection 格式如下,有两种模式 1显示 0不显示 不能混合使用
db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的键,不返回其他键
db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的键,返回其他键
#查看当前集合中所有的内容
db.col.find()
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
db.col.find().pretty()
除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。
#查询title包含 教 子的文档
db.col.find({title:/a/})
#查询title字段以教字开头的文档
db.col.find({title:/^a/})
#查询title字段以教字结尾的文档
db.col.find({title:/a$/})
#添加条件查询文档
db.col.find({'title':"MongoDB"}).pretty()
db.col.find({"title":"菜鸟教程555"}).pretty()
#使用 or查询
db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
#and和or联合使用
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
#添加以下内容来进行测试查询
db.col.insert({
title: 'PHP 教程',
description: 'PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['php'],
likes: 200
})
db.col.insert({title: 'Java 教程',
description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['java'],
likes: 150
})
db.col.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb'],
likes: 100
})
#查询 likes 大于100的
db.col.find({likes : {$gt : 100}})
#查询likes大于等于100的
db.col.find({likes : {$gte : 100}})
#查询likes小于1000的
db.col.find({likes : {$lt : 1000}})
#查询likes小于等于100的
db.col.find({likes : {$lte : 100}})
#查询likes大于100 并且 大于300中间的
db.col.find({likes : {$lt :300, $gt : 100}})
五、MongoDB $type 操作符
#获取 col 集合中 title 为 String 的数据
db.col.find({title:{$type:"string"}})
六、MongoDB Limit与Skip方法
#limit使用语法如下
db.col.find().limit(1)
##skip方法
db.col.find().limit(1).skip(1)
七、MongoDB 排序
#排序方法(倒叙排序) 并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
db.col.find().sort({likes:-1})
八、MongoDB 索引
#创建索引
语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。
db.col.createIndex({"title":1,"description":-1})
查看集合索引
db.col.getIndexes()
查看集合索引大小
db.col.totalIndexSize()
删除集合所有索引
db.col.dropIndexes()
删除集合指定索引
db.col.dropIndex("索引名称")
九、MongoDB 聚合
9.1aggregate() 方法
MongoDB中聚合的方法使用aggregate()。
#添加以下数据
db.mycol.insert({
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by_user: 'runoob.com',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
db.mycol.insert({
title: 'NoSQL Overview',
description: 'No sql database is very fast',
by_user: 'runoob.com',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 10
})
db.mycol.insert({
title: 'Neo4j Overview',
description: 'Neo4j is no sql database',
by_user: 'Neo4j',
url: 'http://www.neo4j.com',
tags: ['neo4j', 'database', 'NoSQL'],
likes: 750
})
#计算每个作者写的文章的个数
$sum 计算总和。
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
$push 在结果文档中插入值到一个数组中。
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根据资源文档的排序获取第一个文档数据。
db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根据资源文档的排序获取最后一个文档数据
db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
十、MongoDB 管道概念
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
这里我们介绍一下聚合框架中常用的几个操作:
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
- m a t c h : 用 于 过 滤 数 据 , 只 输 出 符 合 条 件 的 文 档 。 match:用于过滤数据,只输出符合条件的文档。 match:用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $geoNear:输出接近某一地理位置的有序文档。
1、$project实例
db.mycol.aggregate(
{ $project : {
title : 1 ,
url : 1 ,
}}
);
只显示title和url这两个列 默认是带着_id的 如不想要_id的话可以这样写
db.mycol.aggregate(
{ $project : {
_id : 0 ,
title : 1 ,
url : 1 ,
}}
);
2.$match实例
$match用于获取喜欢数大于40小于或等于1000记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
当 match 条件和 group 同时存在时,顺序会影响检索结果,必须先写 match 在前面。
#下面这段代码的意思也就是 现筛选处 大于40小于1000的记录 然后在根据 by_user来进行分组 进行统计
db.mycol.aggregate( [
{ $match : { likes : { $gt : 40, $lte : 1000 } } },
{ $group: { _id: "$by_user", count: { $sum: 1 } } }
] );
3.$skip实例
#这句话的意思也就是前5个被过滤掉
db.mycol.aggregate(
{ $skip : 5 });