MangoDB基础-02

本文详细介绍了MongoDB的查询操作,包括数据的插入、查找、更新和删除,以及各种查询条件如比较操作符、逻辑操作符和数组操作。还提到了数据库的备份和恢复、监控及配置,并提供了丰富的示例。
摘要由CSDN通过智能技术生成
第二天

复习 :
数据库创建删除:  use  数据库名称
                  db.dropDatabase()
集合的创建和删除  db.createCollection('name')
                  db.collectionName.insert()
    db.collectionName.drop()  删除
  db.collectionName.renameCollection() 重命名

数据库的备份和恢复
 mongodump (备份)   mongorestore(恢复)
数据库的监测
        mongostat   mongotop
数据库配置
        mongod  --dbpath  path  --port  8888

数据的插入 : insert()    save()

=====================================
db.collectionName  集合对象

获取集合对象 : db.getCollection('collection_name')

e.g.
db.getCollection("class0").insert({name:'悟空',age:1700})


查找操作

select  ... from  tableName  where .....

db.collectionName.find()  ---> select * from tableName

find(query,field)
功能 : 查找所有符合条件的文档
参数 : query : 筛选条件  相当于where字句
        field : 展示的域  相当于select的展示部分
返回 : 返回所有查找到的内容

field 参数 : 选择要展示的域  传一组键值对

键表示域名
值表示是否显示该域 0 表示不显示   1 表示显示

* 如果某个域给定0 则表示不显示该域,其他的域均显示
  如果某个域给定1 则表示显示该域 ,其他的域都不显示
* _id 永远默认为显示,除非设置为0
* 除_id外其他域 必须拥有相同的设置,全为0或者全为1
* 如果不写该参数则表示显示所有域内容

e.g.  db.class0.find({},{_id:0,name:1,age:1})

query : 以键值对的形式给出查找条件

查找年龄 17
e.g.   db.class0.find({age:17},{_id:0})
* 如果不写第一个参数则表示查找所有内容

findOne()
功能参数和find() 完全相同,只是只返回第一条查找到的文档

e.g.   db.class0.findOne({age:17},{_id:0})

query的更多用法

操作符: 使用$符号注明一个特殊字符串,表示一定的含义 
e.g.    $lt  表示 小于

比较操作符
$eq  等于
e.g.  db.class0.find({age:{$eq:17}},{_id:0})
      筛选年龄等于17的
=====》 db.class0.find({age:17},{_id:0})

$lt  小于  <

e.g.   db.class0.find({age:{$lt:17}},{_id:0})
* mongo中字符串也可以比较大小

$lte  小于等于   <=

e.g.   db.class0.find({age:{$lte:17}},{_id:0})

$gt   大于  >
e.g.  db.class0.find({age:{$gt:17}},{_id:0})

$gte   大于等于 >=
e.g.  db.class0.find({age:{$gte:17}},{_id:0})

$ne   不等于   !=
e.g.   db.class0.find({age:{$ne:17}},{_id:0})
* 如果一个文档没有这个age域则显示为不等于

$in   包含
e.g.  db.class0.find({age:{$in:[16,17,18]}},{_id:0})

$nin  不包含

e.g.  db.class0.find({age:{$nin:[16,17,18]}},{_id:0})


逻辑操作符

$and   逻辑与

年龄小于19 并且 性别为男
db.class0.find({age:{$lt:19},sex:'m'},{_id:0})
年龄小于19 并且 大于15
db.class0.find({age:{$lt:19,$gt:15}},{_id:0})

e.g.  db.class0.find({$and:[{age:17},{name:'Lei'}]})

$or  逻辑或

e.g.
db.class0.find({$or:[{age:{$lt:22}},{name:'悟空'}]},{_id:0})

db.class0.find({$or:[{age:{$lt:18}},{age:{$gt:30}}]},{_id:0})

$not   逻辑非

e.g.  db.class0.find({age:{$not:{$eq:17}}},{_id:0})

$nor  既不也不   (表示列表集合中的条件都不具备)

db.class0.find({$nor:[{age:{$gt:18}},{sex:'m'}]},{_id:0})

条件混合

(年龄小于20  或者 姓名为阿红) 并且  性别为女的人

db.class0.find({$and:[{$or:[{age:{$lt:20}},{name:'阿红'}]},{sex:'w'}]},{_id:0})

年龄小于等于17  或者  (姓名大于Tom 并且 年龄大于100)
db.class0.find({$or:[{age:{$lte:17}},{name:{$gt:'Tom'},age:{$gt:100}}]},{_id:0})

数组查找 :

查看数组中包含某一项的
e.g.   db.class1.find({hobby:'吃'},{_id:0})

$all
查找一个数组中同时包含多项的文档

e.g. db.class1.find({hobby:{$all:['拍电影','代言']}},{_id:0})
查找hobby数组中既有拍电影,又有代言的文档

$size
查找数组元素个数为指定个数的文档
e.g.  db.class1.find({hobby:{$size:3}},{_id:0})
查找hobby数组中包含三项的文档

数组切片显示
$slice 
对数组切片显示

e.g.
db.class1.find({hobby:{$size:3}},{_id:0,hobby:{$slice:2}})
显示数组的前两项

e.g.
 db.class1.find({hobby:{$size:3}},{_id:0,hobby:{$slice:[1,2]}})
跳过第一项,显示后面两项


其他查找方法:

$exists
判断一个域是否存在

e.g.  查找存在sex域的文档
db.class0.find({sex:{$exists:true}},{_id:0})

e.g.  查找不存在sex域的文档
db.class0.find({sex:{$exists:false}},{_id:0})

$mod
做除数余数查找

e.g.
查找年龄 被2除余1的文档
db.class0.find({age:{$mod:[2,1]}},{_id:0})

$type
查找指定数据类型的文档

e.g. 查找hobby中包含数据类型为 2 的数据的文档
db.class1.find({hobby:{$type:2}},{_id:0})

数据类型对照:
https://docs.mongodb.com/manual/reference/operator/query/type/


进一步的信息筛选

distinct()
功能 : 查看一个集合中某个域值的覆盖范围

e.g.  查看集合中age域的值都有哪些
db.class0.distinct('age')

pretty()
功能 : 将查询结果格式化显示

e.g.    db.class0.find().pretty()

limit(n)
功能: 查询结果显示前 n条

e.g. 查询结果显示前3个
db.class0.find({},{_id:0}).limit(3)

skip(n)
功能 : 显示时跳过前n条

e.g. 显示时跳过前三条
db.class0.find({},{_id:0}).skip(3)

count()
功能 :对查找结果计数统计

e.g.  统计sex 为 m的文档数量
db.class0.find({sex:'m'},{_id:0}).count()

sort({键:1/-1})
功能 : 对查找结果排序
1 表示按照升序排列, -1 表示按照降序排列

对查找结果按照年龄升序排列
db.class0.find({age:{$exists:true}},{_id:0}).sort({age:1})

复合排序 : 当第一排序项相同的时候,按照第二排序项排序

db.class0.find({age:{$exists:true}},{_id:0}).sort({age:1,name:-1})

函数的连续使用
获取集合中年龄最小的三个文档
db.class0.find({},{_id:0}).sort({age:1}).limit(3)


删除文档
delete from tableName where ....

db.collectionName.remove(query,justOne)
功能 : 删除指定的文档
参数 :  query : 筛选要删除的文档, 类似where子句
                  用法同 查找操作
  justOne :布尔值   默认 false 表示删除所有筛选数据
          如果赋值为true 则表示只删除第一条复合的文档

e.g. 
db.class0.remove({$or:[{age:{$exists:false}},{age:{$gt:100}}]})

删除第一个复合条件的文档
db.class0.remove({sex:{$exists:false}},true)

删除集合中所有文档
db.collectionName.remove({})


练习:
1. 创建一个数据库 名字grade
use grade

2. 数据库中创建一个集合名字 class
3. 集合中插入若干数据 文档格式如下
{name:'zhang',age;10,sex:'m',hobby:['a','b','c']}
hobby: draw  sing  dance  basketball football  pingpong
       computer

db.class.insert([
{name:"zhang",age:10,sex:'m',hobby:['a','b','c']},
.....
])

4. 查找练习
查看班级所有人信息
find()

查看班级中年龄为8岁的学生信息
find({age:8})

查看年龄大于10岁的学生信息
find({age:{$gt:10}})

查看年龄在 4---8岁之间的学生信息
find({age:{$gte:4,$lte:8}})

找到年龄为6岁且为男生的学生
find({age:6,sex:'m'})

找到年龄小于7岁或者大于10岁的学生
find({$or:[age:{$lt:7},age:{$gt:10}]})

找到年龄是8岁或者11岁的学生
find({age:{$in:[8,11]}})

找到兴趣爱好有两项的学生
find({hobby:{$size:2}})

找到兴趣爱好有draw的学生
find({hobby:"draw"})

找到既喜欢画画又喜欢跳舞的学生
find({hobby:{$all:["draw","dance"]}})

统计爱好有三项的学生人数
find({hobby:{$size:3}}).count()

找出本班年龄第二大的学生
find().sort({age:-1}).skip(1).limit(1)

查看学生的兴趣范围
db.class.distinct('hobby')

将学生按年龄排序找到年龄最大的三个
find().sort({age:-1}).limit(3)

删除所有 年级大于12或者小于4岁的学生
remove({$or:[{age:{$gt:12}},{age:{$lt:4}}]})

作业 : 复习 数据的查找 和删除操作
        mongo练习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值