-
查看所有的内容:
db.collection.find(querry, filed)
find(query, filed)
功能:查找文档
参数:query 查找条件 相当于where子句
field 查找的域
返回值:查找到的所有文档
query:以键值对的方式传递参数,如果是空{}表示查找所有内容\
field:以键值对的方式给出要查找或不查找的域
以域名为键,以0,1为值分别表示不查找和查找
*如果某一个或者多个域设置为0 表示这些域不查找,其他域均查找
*如果某一个或多个域设置为1,表示这些域查找,其他域均不查找
*_id除非设置为0,否则均会查找
eg:查找结果只有name域
db.class0.find({sex:'w'},{_id:0,name:1})
-
findOne(query,filed)
功能: 查找第一条符合条件的文档
参数: 同find
返回值: 返回查找到的文档
query更新过的筛选用法:
操作符:使用$符号,著名的一个特殊字符串,表达一定的含义,比如$lt 表示小于
-
比较操作符
$eq 等于 ==
eg:查找年龄等于18
db.class0.find({age:{$eq:18}},{_id:0})
$lt 小于 <
eg:查找年龄小于18
db.class0.find({age:{$lt:18}},{_id:0})
db.class0.find({name:{$lt:'helly'}},{_id:0})
*在mongodb中字符串可以比较大小
$lte 小于等于 <=
eg:查找年龄小于等于18
db.class0.find({age:{$lte:18}},{_id:0})
$gt 大于 >
eg:查找年龄大于16小于19
db.class0.find({age:{$gt:16,$lt:19}},{_id:0})
$ gte 大于等于 >=
eg: 查找年龄大于等于16小于19
db.class0.find({age:{$gte:16,$lt:19}},{_id:0})
*在mongodb中所有的{}[]中都可以写多个条件,但根据参数的不同表达的意思不一样
$ne 不等于 !=
eg: 性别不等于'm'的
db.class0.find({sex:{$ne:'m'}},{_id:0})
*使用ne查找也会找到该域不存在的文档
$in 包含
eg:找到年龄为[12,18]
db.class0.find({age:{$in:[12,18]}},{_id:0})
$nin 不包含
eg:找到年龄不为[12,18]的其他人的信息
db.class0.find({age:{$nin:[12,18]}},{_id:0})
-
逻辑操作符
$and 逻辑与
1.在query中如果写多个条件默认即为and
eg:年龄小于等于18,性别为'w'
db.class0.find({$and:[{age:{$lt:18}},{sex:'w'}]},{_id:0})
$or 逻辑或
eg:查找出年龄小于15或者性别为['w','women']
db.class0.find({$or:[{age:{$lt:15}},{sex:{$in:['w','women']}}]},{_id:0})
$not 逻辑非
eg:查找年龄不小于18
db.class0.find({age:{$not:{$lt:18}}},{_id:0})
$nor not(a or b)===>not(a) and not(b)
eg:姓名不能小于helly,年龄不能大于15
db.class0.find({$nor:[{name:{$lt:"helly"}},{age:{$gt:15}}]},{_id:0}
逻辑条件混合
年龄大于17岁,并且为男生 或者姓名叫 Abby
(年龄不大于15或者为女性)并且姓名大于luccy
db.class0.find({$and: [{$or:[{age:{$not:{$gt:15}}},{sex:{$in:['w','women']}],{name:{$gt:'luncy'}}]},
{_id:0})
-
Array
[1,2,3,4]
*数组是有序的数据集合
*mongo中数组也可以有多重数据元素混合
查找数组中包含某一条件的元素
eg:只要socre数组中包含小于60的元素即可查询过滤掉
db.class1.find({score:{$lt:60}},{_id:0})
$all
查找数组中同时包含多项的文档
eg:查看数组中同时包含49,67的
db.class1.find({score:{$all:[49,67]}},{_id:0})
$size
通过数组元素个数查找
$slice
显示数组中指定项
eg:显示数组前两项
db.class1.find({},{_id:0,socre:{$slice:2}})
eg:显示数组索引下标1到2
db.class1.find({},{_id:0,socre:{$slice:[1,2]}})
-
其他常用查找操作符
$exists
通过某个域是否存在筛选
eg:查找不包含sex的文档
db.class1.find({sex:{$exists:false}},{_id:0})
$mod
余数查找
eg:找出年龄为单数的文档
db.class1.find({age:{$mod:[2,1]}},{_id:0})
$type
类型查找
eg:查找name值域类型为2的文档
db.class1.find({name:{$type:2}},{_id:0})
-
查找结果的操作函数
distinct(filed)
db.collection.distinct(filed)
功能:查看某个域的值范围
eg:获取某个域的值范围:去重
db.class0.distinct("name")
prteey()
db.collection.find.prteey()
功能:格式化显示查询结果
eg:
db.class0.find().pretty()
limit(n)
db.collection.find().limit(n)
功能:显示前n条结果
eg:显示前3条查询的结果
db.class0.find({},{_id:0}).limit(3)
skip(n)
db.collection.find().skip(n)
功能:跳过前n条,显示后面的结果
eg:跳过前10条显示后面的查询结果
db.class0.find({},{_id:0}).skip(10)
count()
db.collection.find().count()
功能:统计查询结果数量(如果不添加查询条件,不准确)
*在统计数量时要给出一定的querry条件
eg:统计性别为'm'的文档个数
db.class0.find({sex:'m'},{_id:0}).count()
sort({field:1/-1})
db.collection.find().sort({field:1/-1})
功能:对查找结果排序
参数:以键值对表示按照哪个field排序
1表示升序,-1表示降序
eg:查找结果按照降序排序
db.class0.find({},{_id:0}).sort({age:-1})
eg:按照年龄升序排序,年龄相同时则按照姓名降序
db.class0.find({},{_id:0}).sort({age:1,name:1})
函数的连续调用:
eg:
db.class0.find({},{_id:0}).sort({age:1,name:1}).limit(3)
删除文档
mysql:delete from table where ...
mongodb:db.collection.remove(query, justOne)
remove(query,justOne)
功能:删除文档
参数:query 用法同查找(find)
justOne 布尔值 默认为false表示删除所有符合条件的文档
设置为true则表示只删除一条
eg:删除所有不存在sex域的文档
db.class1.remove({sex:{$exists:false}},{_id:0})
eg:删除第一条性别为'w'的文档
db.class1.remove({sex:'w'},true)
删除所有非object为1的文档
db.class0.remove({_id:{$not:{$type:7}}})
删除集合中所有的文档
eg:删除class1中所有的文档
db.class1.remove({})
-
练习:
1.创建数据 名称 grade
2.创建集合 名称 class
3.集合中插入若干文档 文档格式
{name:'zhangsan',age:10,sex:'m',hobby:['a','b']}
年龄范围:6-15
爱好选择:draw sing dance basketball football pingpang
computer 每个同学选择2-5项
4.查找练习
查看班级中所有学生信息
db.class.find()
查看班级中年龄为8岁的学生的信息
db.class.find({age:8},{_id:0})
查看班级中年龄大于10岁学生的信息
db.class.find({age:{$gt:10}},{_id:0})
查看班级中年龄在8-11岁之间的学生的信息
db.class.find({age:{$gte:8,$lte:11}},{_id:0})
查看班级中年龄为10岁且为男生的学生信息
db.class.find({age:10,sex:'m'},{_id:0})
查看班级中小于7岁或者大于14岁的学生
db.class.find({$or:[{age:{$lt:7}},{age:{$gt:14}}]},{_id:0})
查看班级中年龄为8岁或者11岁的学生
db.class.find({$or:[{age:8},{age:11}]},{_id:0})
db.class.find({age:{$in:[8,11]}})
找到有2项兴趣爱好的学生
db.class.find({hobby:{$size:2}},{_id:0})
找到兴趣中有draw的学生
db.class.find({hobby:{$all:['draw']}},{_id:0})
找到即喜欢画画又喜欢跳舞的学生
db.class.find({hobby:{$all:['draw','dance']}},{_id:0})
统计兴趣有4项的学生人数
db.class.find({$size:4}).count()
找出本班年龄第二大的学生
db.class.find().sort({age:-1}).skip(1).limit(1)
查看本班学生兴趣爱好覆盖哪些方面
db.class.distinct('hobby')
找到年龄最大的三个学生
db.class.find().sort({age:-1}).limit(3)
删除所有年龄大于16岁或者小于7岁的学生除非它的特殊爱好有3项以上
db.class.remove({$or:[{age:{$lt:7}},{age:{$gt:16}}],{hobby:{$size:2}}})
-
修改文档
mysql:update table set... where ...
mongodb:db.colleection.update(query,update,upset,multi)
update(query,update,upset,multi)
功能:修改文档
参数:query 筛选条件 用法同find
update 要修改成什么内容,通常配合修改操作符(修改器)使用
upsert 布尔值,默认是false 如果query没有筛选到文档则不
做任何操作,如果设置为true,则如果query没有筛选到
匹配文档则根据query和update内容插入到新的文档
multi 布尔值,默认为false表示如果有多条符合条件
文档则只修改第一条如果设置为true则表示修改所有的
符合条件的文档
eg:将Tom的年龄修改为28
db.class0.update({name:'Tom'},{$set:{age:28}})
eg:插入一条新的文档
db.class0.update({name:'Jame'},{$set:{age:18}},true)
eg:修改所有年龄小于17的为18
db.class0.update({age:{$lt:17}},{$set:{age:20}},false,true)