系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
一、MongoDB安装
mongodb4.4链接:https://pan.baidu.com/s/1q8oAMGCzVvh2qf2q2PI0cw?pwd=1234
提取码:1234
二、图形化界面
- Navicate for MongoDB
Navicate百度网盘链接:https://pan.baidu.com/s/1bdNMJKC7zq59N6l1mQOzlw?pwd=1234
提取码:1234 - Robo 3T/Studio 3T
官网下载链接:https://studio3t.com/download-thank-you/?OS=win64
百度网盘链接:https://pan.baidu.com/s/1hXEXDhYWCqBkYlHHAc4NRg?pwd=1234
提取码:1234
三、MongoDB基本操作
1. 插入文档
db.people.insert({_id:1,name:"zhangsan",sex:"男",age:21})
db.people.insert({_id:2,name:"lisi",sex:"男",age:20})
db.people.insert({_id:3,name:"wangwu",sex:"女",age:20})
db.people.insert({_id:4,name:"zhaoliu",sex:"女",age:18})
db.people.insert({_id:5,name:"wuqi",sex:"男",age:19})
db.people.find()
_id唯一标识文档,如果文档中已经存在_id:5,此时再插入会报错
当然也可以使用insertMany()函数一次插入多个文档
//插入3个文档,使用insertMany()函数
db.col.insertMany([
{
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by_user: 'runoob.com',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
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
},
{
title: 'Neo4j Overview',
description: 'Neo4j is no sql database',
by_user: 'Neo4j',
url: 'http://www.neo4j.com',
tags: ['neo4j', 'database', 'NoSQL'],
likes: 750
}])
2. 更新文档
更新第一个文档,将“zhangsan”改为"zhangsanfeng"
db.people.update({_id:1},{$set:{name:"zhangsanfeng"}})
3. 删除文档
remove()是删除集合中所有文档,执行后仍然存在people集合
db.people.remove({})
而drop()是删除集合,执行后不存在people集合
db.people.drop()
4. 查询文档
4.1 查询年龄大于19岁的人数
db.people.find({age:{$gt:19}})
4.2 查询年龄小于等于20岁的人数
db.people.find({age:{$lte:20}})
4.3 AND操作
db.people.insert({_id:6,name:"lisi",sex:"男",age:20})
db.people.insert({_id:7,name:"lisi",sex:"男",age:21})
db.people.find()
此时有三个name="lisi"的文档,如何查找年龄为20的lisi?通过AND操作
db.people.find({name:"lisi",age:21})
两个key-value之间通过逗号隔开即可
4.4 OR操作
查找wangwu或者zhaoliu的信息
db.people.find({$or:[{name:"wangwu"},{name:"zhaoliu"}]})
注意OR和AND的区别,OR两个key-value之间是用{}分开的。
5. 聚合基本操作
//1. 统计男生、女生的总年龄
db.people.aggregate([
{$group:{_id:"$sex",age_sum:{$sum:"$age"}}}
])
//2.统计男生女生的总人数
db.people.aggregate([
{$group:{_id:"$sex",people_sum:{$sum:1}}}
])
$sum:1表示统计总数,比如男为3位,女为2位
//3.求学生总数和平均年龄
db.people.aggregate([
{$group:{_id:null,people_sum:{$sum:1},
avg_age:{$avg:"$age"}}}
])
//4.查询男生、女生人数,按人数升序
db.people.aggregate([
{$group:{_id:"$sex",people_sum:{$sum:1}}},
{$sort:{people_sum:1}}
])
$sort中,1为升序,-1为降序
//5.先按性别分组,分完组之后将age属性映射到数组中:
db.people.aggregate([
{$group:{_id:"$sex",num:{$push:"$age"}}}
])
6. 索引
什么是索引?为什么需要索引?
相当于书的目录,减少查询时间
//插入10万条数据对比索引优点
for(var i=0;i<100000;i++)
db.col2.insert({name:'a',time:i})
db.col2.find()
5.1 不使用索引查询time:100-20000间的数据耗时29ms
db.col2.find({time:{$gt:100,$lt:20000}}).explain("executionStats")
5.2 创建索引后再来查询
创建索引
db.col2.createIndex({time:1})
5.3 查询索引
db.col2.getIndexes()
5.4 删除索引
db.col2.dropIndex("time_1")
此时time_1索引已被删除,最好是退出后重新查询,可以看到耗时0毫秒
db.col2.find({time:{$gt:100,$lt:20000}}).explain("executionStats")
5.5 索引几种类型
5.5.1 组合(复合)索引
同时创建两个及以上索引
db.col2.createIndex({"name":1,"time":-1})
5.5.2 多值索引
db.col3.insert({name:"lisi",tag:["a","b","c"]})
db.col3.createIndex({tag:1})
db.col3.find({tag:"b"})
5.5.3 全文索引
db.col3.createIndex({"name":"text"})
-
索引
-
创建索引
-
查看
总结
以上就是今天要讲的内容,本文仅仅简单介绍了mongoDB的使用,而mongoDB提供了大量能使我们快速便捷地处理数据的函数和方法。