MongoDB基本操作

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 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值