MongoDB下载安装教程
https://blog.csdn.net/qq_46112274/article/details/117420196
基本概念
参考菜鸟教程 https://www.runoob.com/mongodb/mongodb-create-collection.html
D:\Program Files\MongoDB\Server\4.2\bin>mongo.exe
show dbs
use meta ## 如果数据库不存在,则创建数据库,否则切换到指定数据库
db.getName() ## 查看当前使用的数据库
db.help()
db.dropDatabase() ## 删除数据库
show collections ## 查看数据库下的集合
db.createCollection("lanren312") ## 创建集合
db.lanren312.remove({}) ## 清空集合
db.lanren312.drop() ## 删除集合
cls ## 清屏
可以把集合理解成表
一、新增
1、插入数据insert、save
db.lanren312.insert({age: 18, name:'张三', tag:'stu'})
db.lanren312.save({age: 29, name:'赵六', tag:'aaa'})
2、添加数组
db.lanren312.insertOne({"作物":["水稻,棉花,大豆,小麦"],"蔬菜":["胡萝卜","西红柿"]})
$push ## 把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去
db.lanren312.update({name:'张三'},{'$push':{作物:8}})
db.lanren312.update({name:'张三'},{'$push':{作物:11}})
db.lanren312.update({name:'张三'},{'$push':{作物: [9,10]}})
3、数组移除元素
db.lanren312.update({name:'张三'},{$pull:{作物: [9,10]}})
二、修改
1、$set 可以用来修改文档中的指定属性,若键不存在并创建
db.lanren312.update({name:'张达'},{$set:{memo: "xxxxx"}});
db.lanren312.update({name:'张达'},{$set:{memo:'zzzz',tag:'admin'}})
类似
update lanren312 set memo='zzzz',tag='admin' where name='张达';
2、$unset 可以用来删除文档的指定属性
db.lanren312.update({name:"张达"},{$unset:{"id":1}})
3、$inc 可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作
db.lanren312.update({name:'张三'}, {$inc:{age:8}})
db.lanren312.update({name:'张三'}, {$inc:{age:-5}})
4、$rename 重命名列
db.lanren312.update({name:'张达'},{$rename:{tag:'sex'}})
Update()有几个参数需要注意
db.collection.update(criteria, objNew, upsert, mult)
criteria:需要更新的条件表达式
objNew:更新表达式
upsert:如FI标记录不存在,是否插入新文档。
multi:是否更新多个文档
三、查询
1、带条件查询 where
db.lanren312.find()
db.lanren312.find().pretty() ## 易读结构
db.lanren312.find({"name":"赵六"}).pretty()
类似
select * from lanren312 where name = '赵六'
db.lanren312.find({}).count() ## 查询数量
db.lanren312.find({}).length() ## 查询数量
db.lanren312.find({age: 18})[0] ## 查询年龄为18的第一个
2、过滤字段
db.lanren312.find({"name":"赵六"},{"name":1,"age":1}).pretty()
3、条件操作符(>)(<)(>=)(<= )
>) 大于 - $gt
(<) 小于 - $lt
(>=) 大于等于 - $gte
(<= ) 小于等于 - $lte
db.lanren312.find({"age":{$lt:18}}).pretty() # where likes < 18
db.lanren312.find({"age":{$lte:18}}).pretty() # where likes <= 18
db.lanren312.find({"age":{$gt:18}}).pretty() # where likes > 18
db.lanren312.find({"age":{$gte:18}}).pretty() # where likes >= 18
db.lanren312.find({"age":{$ne:18}}).pretty() # where likes != 18
db.lanren312.find({age:{$lte:70, $gte:18}}).pretty()
类似
Select * from lanren312 where age>100 AND age<200;
4、排序(-1 是用于降序排列)
db.lanren312.find().sort({age: -1})
类似
select * from lanren312 order by age Desc
db.lanren312.find().sort({age: 1})
5、or条件
db.lanren312.find({$or:[{tag: 'admin'}, {name:'赵六'}]}).pretty()
类似
select * from lanren312 where tag='admin' or name='赵六';
6、and、or联合使用
db.lanren312.find({age:{$gt:18},$or:[{tag: 'aa'}, {name:'王五'}]}).pretty()
类似
select * from lanren312 where age> 18 and (tag='admin' or name='赵六');
7、移除文档
db.lanren312.remove({'name':'赵六'})
类似
delete from lanren312 where name = '赵六';
## 推荐使用id删除
db.lanren666.remove({_id: ObjectId("6359e1c0c6921437758e7960")})
8、Limit() 方法
db.lanren312.find().limit(3)
9、正则表达式
db.lanren312.find({"title":{$regex:"aa"}})
等同于
db.lanren312.find({"title":/aa/})
# 不区分大小写
db.lanren312.find({"title":{$regex:"aa",$options:"$i"}})
等同于
db.lanren312.find({"title":/aa/i})
10、$in $nin
db.lanren312.find({age:{$in:[16,29]}})
db.lanren312.find({age:{$nin:[16,29]}})
11、$mod $not
$mod会将查询的值除以第一个给定的值,若余数等于第二个给定的值,则返回该结果。
db.lanren312.find({age:{$mod:[59,0]}})
db.lanren312.find({age:{$not:{$mod:[59,0]}}})
$not与正则表达式联合使用时极为有效
db.lanren312.find({name:{$not: /^张.*/}}) ## 查询名字不以 张 开头的
12、distinct 去重
db.lanren666.distinct("name",{age:15})
四、聚合函数
1、基本操作
db.lanren312.aggregate([{$group : {_id : "$age", num_tutorial : {$sum : 1}}}])
类似
select age, count(*) from lanren312 group by age
2、$lookup 实现左连接
db.lanren666.aggregate([
{ $lookup:
{
from: 'lanren666', // 右集合
localField: 'id', // 左集合 join 字段
foreignField: 'parent_id', // 右集合 join 字段
as: 'orderdetails' // 新生成字段(类型array)
}
}
])
db.lanren666.aggregate([
{ $lookup:
{
from: 'lanren666', // 右集合
localField: 'id', // 左集合 join 字段
foreignField: 'parent_id', // 右集合 join 字段
as: 'orderdetails' // 新生成字段(类型array)
}
},
{
$project: { // 选择默认输出
orderdetails: {
_id: 0,
score: 1,
parent_id: 1
},
_id: 0,
id: 1,
name: 1,
tag: 1,
age: 1,
}
}
])
五、管道
1、$project实例
db.lanren312.aggregate({$project:{name:1,age:1}}) ## 默认包含_id
db.lanren312.aggregate({$project:{_id:0,name:1,age:1}}) ## 不包含_id写法
2、$match实例
db.lanren312.aggregate([{$match:{age:{$gt:15, $lte:26}}}])
db.lanren312.aggregate([{$match:{age:{$gt:15, $lte:26}}},{$group:{_id:null, count:{$sum:1}}}])
六、索引
1、索引基本操作
1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1
db.lanren312.createIndex({name:1}) ## 创建索引
db.lanren312.getIndexes() ## 查看索引
db.lanren312.dropIndex('name_1') ## 删除某一个索引
db.lanren312.totalIndexSize() ## 查看集合索引大小
db.lanren312.dropIndexes() ## 删除集合所有索引
2、设置使用多个字段创建索引(关系型数据库中称作复合索引)
db.lanren312.createIndex({"name":1,"age":-1})
七、数据导入导出
参考博客 https://www.cnblogs.com/l55776/p/16510904.html
1、mongoexport 导出文件
-d 库名
-c 表名
-f field1,field2...列名
-q 查询条件
-o 导出的文件名
-- csv 导出csv格式(便于和传统数据库交换数据)
mongoexport.exe
mongoexport -d meta -c lanren312 -o ./lanren312.json ## 导出导了bin目录下
mongoexport -d meta -c lanren312 -o C:\Users\Administrator\Desktop\lanren312.json ## 导出到桌面
2、mongoimport 导入文件
-d 待导入的数据库
-c 待导入的表(不存在会自己创建)
--type csv/json(默认)
--file 备份文件路径
mongoimport.exe
mongoimport -h localhost:27017 -d meta -c lanren111 --type json --file ./lanren312.json
mongoimport -h localhost:27017 -d meta -c lanren111 --type json --file C:\Users\Administrator\Desktop\lanren312.json
八、mongo可视化工具
MongoDB Compass下载地址 https://www.mongodb.com/try/download/compass