查询文档

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} 

运算操作符

 

上一篇:手把手教你配置阿里云服务器搭建网站 全套完整图文教程!


下一篇:Centos8搭建web服务器