mongodb总结

本文详细介绍了MongoDB的基本操作,包括如何启动服务、使用数据库、创建和操作集合、插入与查询数据、执行聚合操作以及建立和管理索引。内容涵盖从简单的数据管理到复杂的数据查询和分析,是MongoDB入门学习的重要参考。
摘要由CSDN通过智能技术生成
(1) 使用mongod命令启动 MongoDB服务
	mongod –dbpath D:\MongoDB\db
	show databases   或  show dbs
(2) 使用数据库
	use 数据库名;
(3) 创建集合(相当于关系数据中的表)
	db.createCollection({"集合名"})
(4) 插入数据(insert())
	语法: db.集合名称.insert( {BSON格式数据})
	在集合中增加数组数据:
       db.集合名称.insert({"key":["value1","value2"]})
	在集合中增加10000个url分别为 ljc-1、ljc-2、ljc-3……的数据:
           for(var a=1;a<=10000;a++){
                  db.集合名称.insert({"url":"ljc-"+a})
           }

(5) 查看数据(find())
	语法: db.集合名称. find ({})
	简单查询:
	   不显示“_id”:
          db.集合名称.find({查询条件},{"_id":0})
运算符: 大于($gt)、小于($lt)、大于等于($gte)、小于等于($lte)、不等于($ne)、等于(key : value的形式)
	
	等于:直接写成bson格式
    大于:db.集合名称.find({"key":{"$gt":value}})
    不等于(不是):db.集合名称.find({"key":{"$ne":"value"}})   
运算符:与($and)、或($or)、非($not、$nor)  
    查询数值在某区间的信息:
       db.集合名称.find({"key":[{"$gte":value},{"$lte":value}]})
    或者:
       db.集合名称.find({"$or":[
                        {"key1":{"$gt":value1}},
                        {"key2":{"$gt":value2}}]
       })
    并且:
       db.集合名称.find({"$and":[
                        {"key1":{"$lte":value1}},
                        {"key2":{"$lte":value2}}]
       })
运算符:$in 和 $nin
     db.集合名称.find({"key":{"$in":["value1","value2","value3"]}})
     db.集合名称.find({"key":{"$nin":["value1","value2","value3"]}})
复杂查询:
	1)查询姓名带谷字的同学信息
	   db.集合名称.find({"name": /谷/})
	2)查询姓名含有字符A或者a的同学信息
	   db.集合名称.find({"name": /A/i})
	3)按照成绩进行升序排序
	   db.集合名称.find().sort({"score":1})
	4)按成绩降序排序,只显示第一页的5条数据(limit(5))
	   db.集合名称.find().sort({"socre":-1}).limit(5)
	5)按成绩降序排序,5条数据一页(limit(5)),要求只显示第二页的数据(skip(4))
	   db.集合名称.find().sort({"score":-1}).skip(4).limit(5)
运算符:$all、$size、$slice、$elemMatch
	6)查询同时参加语文和数学课程的学生
	   db.集合名称.find({"course":{$all:["语文", "数学"]}})
	7)查询数组中第二个内容为数学的信息
	   db.集合名称.find({"course":"数学"},{"arr":{"$slice":[0,3]}}))
	   db.集合名称.find({"course.1":"数学"})
	8)查询只参加两门课的学生
	   db.集合名称.find({"course": {$size:2}})
	9)返回年龄为19岁所有学生的信息,但是要求只显示两门参加课程  
	   db.集合名称.find({"age":19},{"course":{"$slice":2}})
	10)查询出年龄大于等于19岁,父母有人是局长的学生信息
	   db.集合名称.find({"$and":[{"age":{"$gte":19}},{"parents":{"$elemMatch":{"job":"局长"}}}]})
运算符:$exists  判断某个字段是否存在,如果设置为true表示存在
	11)查询具有parents成员的数据
	   db.集合名称.find({"parents":{"$exists":true}})
	12)查询不具有course成员的数据
	   db.集合名称.find({"course":{"$exists":false}})

MongoDB聚合操作:
(1)查询每个职位的人数
    db.emp.aggregate([{"$group" : {"_id": "$job","job_count":{"$sum": 1}}}])
(2)查询每个职位的总工资
    db.emp.aggregate([{"$group" : {"_id": "$job","job_sal":{"$sum": "$salary"}}}])
(3)查询每个职位的总工资 ,平均工资
    db.emp.aggregate([{"$group":{"_id" : "$job",
	    "job_sal" : {"$sum": "$salary"},
	    "job_avg" : {"$avg": "$salary"}}
    }])
(4)查询每个职位的最高工资 ,最低工资
    db.emp.aggregate([{"$group":{"_id" : "$job",
	    "max_sal" : {"$max" : "$salary"},
	    "min_sal" : {"$min" : "$salary"}}
    }])
(5)查询出每个职位的工资数据
    db.emp.aggregate([{"$group":{"_id" : "$job",
	     "sal_data" : {"$push" : "$salary"}
    }}])
(6)查询每个职位的人员
    db.emp.aggregate([{"$group":{"_id" : "$job",
	      "sal_data" : {"$push" : "$name"}}}
    ])
(7)查询每个职位的人员 只保留第一个名称
    db.emp.aggregate([{"$group":{"_id" : "$job",
	       "sal_data" : {"$first" : "$name"}}}
    ])
(8)查询每个职位的人员 只保留最后一个名称
    db.emp.aggregate([{"$group":{"_id" : "$job",
	       "sal_data" : {"$last" : "$name"}}}
    ])
(9)只显示name,job成员,不显示“_id”
    db.emp.aggregate([{"$project":{"_id" : 0,"name" : 1,"job" : 1}}])
(10)查询每个人员的年薪,显示name,job和年薪,不显示“_id”
     db.emp.aggregate([{"$project":{"_id" : 0,"name" : 1,"job" : 1,
	       "年薪" : {"$multiply" :["$salary",12]}}}])
(11)找出工资大于2000的所有雇员姓名、年龄、工资
     db.emp.aggregate([
		{"$match" : {"salary": {"$gt" : 2000}}},
		{"$project":{"name" : 1,"age" :1,"salary" : 1,"_id" : 0}}
     ])

MongoDB索引:
(1)查看students集合的索引
    db.students.getIndexes()
    db.students.find()
(2)在age成员上,设置一个降序索引
    db.students.createIndex({"age":-1})
(3)查询age等于19岁的数据,并对查询过程在索引上做一个分析
    db.students.find({"age":19}).explain()
(4)查询score大于60分的数据,并对查询过程在索引上做一个分析
    db.students.find({"score":{"$gt":60}}).explain()
(5)查询age等于19岁 或者 score大于60分的数据,并对查询过程在索引上做一个分析
    db.students.find({"$or":[{"age":19},{"score":{"$gt":60}}]}).explain()
(6)创建一个age和score的复合索引,两者均为降序
    db.students.createIndex({"age":-1,"score":-1})
(7)删除一个索引
    db.students.dropIndex({"age":-1})
(8)删除全部索引
    db.students.dropIndexes()
(9)为name创建一个唯一索引
    db.students.createIndex({"name":1},{"unique":true})
(10)在phones集合中,为time创建过期索引,升序,10秒过期
    db.phones.find()
    db.phones.getIndexes()
    db.phones.createIndex({"time":1,},{expireAfterSeconds:10})
(11)在shop集合中,为loc设置2d索引
    db.shop.find()
    db.shop.getIndexes()
    db.shop.createIndex({"loc": "2d"})
(12)在shop集合中,查询坐标[11,11]附近最大距离为5范围内的数据
    db.shop.find({"loc": {"$near" :[11,11], "$maxDistance": 5}})
(13)在shop集合中,查询坐标[9,9]和[11,11]范围内的数据
    db.shop.find({"loc": {"$geoWithin" : {"$box": [[9,9][11,11]]}}})
(14)在shop集合中,查询以坐标[10,10]为圆心,2为半径范围内的数据
    db.shop.find({"loc": {"$geoWithin" : {"$center": [[10,10],2]}}})
(6) 增加不规则数据
	var 变量={BSON格式数据}
	db.集合名称.insert(变量)
(7) 删除数据(remove、delete)
	语法: db.集合名称. remove ({删除条件})
	删除所有姓名里面带“谷”的信息
       db.集合名称.deleteMany({"name":/谷/})
	删除姓名带“漓江”的信息,要求只删除一个
       db.集合名称.deleteOne({"name":/漓江/})
(8) 更新数据(update())
	语法: db.集合名称. update ({更新条件,新值})
	更新存在的数据:
       db.集合名称.updateMany({"key原":value原},{"$set":{"key更新":value更新}})
       db.集合名称.update({"key原":value原},{"$set":{"key更新":value更新}},false,true)
	更新不存在的数据:将年龄是30岁的人姓名更新为“不存在”
       db.集合名称.update({"age":30},{"$set":{"name":"不存在"}},true,false)
	将所有年龄为19岁的成绩一律减少30分,年龄减小1岁
       db.集合名称.updateMany({"age":19},{"$inc":{"score":-30,"age":-1}})
       db.集合名称.update({"age":19},{"$inc":{"score":-30,"age":-1}},false,true)
	将所有年龄是20岁的人的成绩修改为99
       db.集合名称.updateMany({"age":20},{"$set":{"score":99}})
       db.集合名称.update({"age":20},{"$set":{"score":99}},false,true)
	删除“张三”的年龄与成绩信息
       db.集合名称.updateMany({"name":"张三"},{"$unset":{"age":1,"score":1}})
       db.集合名称.update({"name":"张三"},{"$unset":{"age":1,"score":1}},false,true)
运算符:$push、$pushAll、$addToSet
	向“张三”添加课程信息“语文” 
        db.集合名称.update({"name":"张三"},{"$push":{"course":"语文"}})
	向“谷大神-E”里面的课程追加一个“美术”
        db.集合名称.update({"name":"谷大神-E"},{"$push":{"course":"美术"}})
	向“王五”的信息里面添加多个课程内容:美术、音乐、体育
        db.集合名称.update({"name":"王五"},{"$pushAll":{"course":["美术","音乐","体育"]}})
	向“王五”的信息添加新的内容:course为舞蹈
        db.集合名称.update({"name":"王五"},{"$addToSet":{"course":"舞蹈"}})
运算符: $pop、$pull、$pullAll
	删除“王五”的第一个课程
       db.集合名称.update({"name":"王五"},{"$pop":{"course":-1}})
	删除“王五”的最后一个课程
       db.集合名称.update({"name":"王五"},{"$pop":{"course":1}})
	删除“王五”的音乐课程信息
       db.集合名称.update({"name":"王五"},{"$pull":{"course":"音乐"}})
	删除“谷大神-A”的三门课程
       db.集合名称.update({"name":"谷大神-A"},{"$pullAll":{"course":["语文","数学","英语"]}})
运算符: $rename
	将“张三”name成员名称修改为“姓名”
       db.集合名称.update({"name":"张三"},{"$rename":{"name":"姓名"}},false,true)
(9) 删除集合
	语法: db.集合名称.drop ()
(10) 删除数据库
	db.dropDatabase();它删除的是当前所使用的数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值