- 查找操作
1.db.collection.find(query,field)
功能:查找文档
参数:query 查找条件,相当于where子句
field 查找的域
返回值:查找到的所有文档
#query:以键值对的方式传递参数,如果是空或{}表示查找所有内容
e.g: db.test.find({sex:'w'})
#field:以键值对的方式给出要查找(不查找)的域,以域名为键,以0,1为值分别表示不查找和查找
* 查找集合的所有内容
db.collection.find()
* 如果某一个或者多个域设置为0,表示这些域不查找,其他域均查找
* 如果某一个或多个域设置为1,表示这些域查找,其他域均不查找
* _id除非设置为0,否则均会查找
* 除_id域其他域不能有的设置1有的设置0
e.g 查找结果只有name域
db.class0.find({sex:'w'},{_id:0,name:1})
2.findOne(query,field)
功能:查找第一条符合条件的文档
参数:同find
返回值:返回查找到的文档
-
query更多的筛选用法
操作符:使用$符号注明的一个特殊字符串,表达一定的含义,比如$lt表示小于 -
比较操作符:
$eq 等于 ==
db.class0.find({age:{$eq:18}},{_id:0}) 等价于 db.class0.find({sex:18},{_id:0})
$lt 小于 <
db.class0.find({age:{$lt:18}},{_id:0})
* 在mongodb中字符串可以比较大小
$lte 小于等于 <=
db.class0.find({age:{$lte:18}},{_id:0})
db.class0.find({age:{$gt:16,$lt:19},{_id:0}) # 大于16,小于19
*在mongodb中所有的{} [] 中都可以写多个条件。但根据参数的不同表达的意思不一样
$gte 大于等于 >=
db.class0.find({age:{$gte:18},{_id:0})
$ne 不等于 !=
db.class0.find({age:{$ne:19},{_id:0})
db.class0.find({age:{$ne:19},sex:{$ne:'w'}},{_id:0})
* 使用ne查找也会找到该域不存在的文档
$in 包含
db.class0.find({age:{$in:[19,29,39]},sex:'w'},{_id:0}) # 找到年龄在19、29、39的女性
$nin 不包含
db.class0.find({age:{$nin:[17,18,19]}}) # 找到年龄不为17,18,19的数据
- 逻辑操作符
$and
1.在query中如果写多个条件,默认即为and
e.g:
db.class0.find({age:{$ne:19},sex:{$ne:'w'}},{_id:0})
2.逻辑与 $and:[{},{}] 条件在中括号中括起来
db.class0.find({$and:[{age:{$lt:18}},{sex:'m'}]},{_id:0})
$or 逻辑或
e.g 找到年龄小于18岁或者性别为女的数据
db.class0.find({$or:[{age:{$lt:18}},{sex:'w'}]},{_id:0})
$not 逻辑非 类似与 $ne
db.class0.find({sex:{$not:{$eq:'m'}}},{_id:0})
db.class0.find({sex:{$ne:'m'}},{_id:0})
e.g 年龄不小于18的
db.class0.find({age:{$not:{$lt:18}}},{_id:0})
$nor == not (a or b) == (not a) and (not b)
# 得到大于等于18的女性
db.class0.find({$nor:[{sex:'w'},{age:{$lt:18}}]})
# 姓名不能小于lucy年龄不能大于18
db.class0.find({$nor:[{name:{$lt:'Lucy'}},{age:{$gt:18}}]},{_id:0})
* 单目运算符为{} 双目运算符为[]