find
db.<collection>.find( <query>, <projection> );
- query:查询条件
- projection:投影文档,规定了查询的结果中显示哪些字段
查询所有文档
- db.person.find() 查询 person 集合中所有的文档(不传入条件默认查询所有文档)
指定单个条件查询文档
- db.person.find({name: 'zs'}) 查询带有 name: 'zs' 的文档 (如果有多个文档都满足条件,则把所有满足条件的文档全部查询出来)
指定多个条件查询文档
- db.person.find({name: 'zs', age: 66}) 查询带有 {name: 'zs'} 并且 {age: 66} 的文档 (多个条件查询默认是and关系)
查询某个文档中一个字段,该字段又是一个文档的情况
-
db.person.insert( [ {name: 'zs', age: 17, book: {name: 'js',}}, {name: 'ls', age: 18, book: {name: 'css'}}, {name: 'ww', age: 19, book: {name: 'html'}} ] )
查询 book 字段中 name 的取值是 js的文档 db.person.find({'book.name': 'js'})
文档投影
- db.person.find({}, {name: 1}) 查询所有文档,并将查询出来的每个文档只显示name字段 (取值为1则显示, _id主键默认是1)
使用比较运算符查询
db.<collection>.find( {<field>: {$<operator>: <value>}}, <projection> )
- $lt 小于
- $lte 小于等于
- $gt 大于
- $gte 大于等于
- $ne 不等于
- $eq 等于
- $in 包含一个条件或以上
- $nin 一个条件都不包括
db.person.insert([ {name: 'zs', age: 17}, {name: 'ls', age: 18}, {name: 'ww', age: 19}, ])
- 查询年龄大于等于18岁的人 db.person.find({'age': {'$gte': 18}})
- 查询年龄小于18岁的人 db.person.find({age: {$lt: 18}})
- 查询年龄不等于18岁的人 db.person.find({age: {$ne: 18}})
- 查询年龄等于18岁的人 db.person.find({age: {$eq: 18}})
- 查询 name 是 zs 或者 ls 的文档 db.person.find({name: {$in: ['zs', 'ls']}})
- 查询 name 不是 zs 也不是 ls 的文档 db.person.find({name: {$nin: ['zs', 'ls']}})
使用逻辑运算符
- $not 匹配条件不成立的文档
- $and 匹配条件全部成立的文档
- $or 匹配至少一个条件成立的文档
- $nor 匹配多个条件全部不成立的文档
db.person.find({age: {$not: {$eq: 18}}})
查询每个文档中 age 字段不匹配 {$eq: 18} 这个条件的文档
db.person.find({$and: [ {name: 'zs'}, {age: {$lt: 18}} ]})
查询文档必须同时满足 {name: 'zs'} 和 {age: {$lt: 18}}
db.person.find({ $or: [ {name: 'zs'}, {name: 'ls'}
] })
查询的文档只要满足一个条件就可以
db.person.find({ $nor: [ {name: 'zs'}, {name: 'ls'}, ] });
查询的文档必须不满足所有条件才能查询出来
使用字段操作符
- $exists 查询包含某个字段的文档
- $type 查询数据类型
db.person.insert([ {name: 'zs', age: 17, gender: '男'}, {name: 'ls', age: 18}, {name: 'ww', age: 19, gender: '女'} ])
查询出拥有 gender 字段的所有文档
db.person.find({ gender: {$exists: true} });
使用 $type 查询 age 字段的取值是字符串类型的文档
db.person.insert([
{name: '霸哥', age: '666'}
])
db.person.find({ age: {$type: 'string'} })
数组操作符
- $all 匹配数组中包含所有指定查询值的文档
- $elemMatch 匹配数组中至少有一个能完全匹配所有的查询条件的文档
db.person.insert([ {name: 'zs', tags: ['html', 'js', 'vue']}, {name: 'ls', tags: ['html', 'react', 'vue']}, {name: 'ww', tags: ['html', 'node', 'js']}, ])
db.person.find({ tags: {$all: ['html', 'js']} })
查询 tags 数组中同时包含 html 和 js 的文档
db.school.insert([ { class: 'one', students: [ {name: 'zs', age: 18}, {name: 'ls', age: 19}, {name: 'ww', age: 20} ] }, { class: 'two', students: [ {name: 'zs', age: 20}, {name: 'ls', age: 19}, {name: 'ww', age: 18} ] } ])
db.school.find({ 'students': {$elemMatch: {name: 'ww', age: 18}} })
查询文档的 students 数组中有一个文档必须完全匹配 {name: 'ww', age: 18}
运算操作符