MongoDB学习笔记-查询

find

MongoDB文档查询命令: find

1
db.collection.find()

上面的操作命令将会返回集合的全部内容。

指定返回的键

1
2
3
4
db.collection.find({key: value})

//第二个参数用来指定返回结果中剔除某个键值对。
db.collection.find({key: value},{key1: 0})

条件查询

查询条件

操作格式范例
等于{key: value}db.news.find({‘id’: 4})
小于{key: {$lt:value}}db.news.find({‘id’: {$lt: 4}})
小于或等于{key: {$lte:value}}db.news.find({‘id’: {$lte: 4}})
大于{key: {$gt:value}}db.news.find({‘id’: {$gt: 4}})
大于或等于{key: {$gte:value}}db.news.find({‘id’: {$gte: 4}})
不等于{key: {$ne:value}}db.news.find({‘id’: {$ne: 4}})

OR查询

MongoDB中两中方式进行OR查询:$in 用来查询一个键的多个值。 $or用来完成多个键值的任意给定值。

$in

1
db.news.find({'id': {$in:[1,2,4]}})

与$in相对的是$nin,将返回与数组中所有条件都不匹配的文档。

$or

1
db.news.find({$or:[{title:'test'},{id:3}]})

$not是元语句,可以用在任何其他条件之上。

1
db.news.find({$not:{$mod:[5,1]}})

条件语句规则

1
db.news.find({id:{$lt:5,$gte:3}})

一个修改器可以有多个条件,但是一个键不能对应多个更新修改器。

特定类型的查询

null

null能匹配自身,也能匹配不存在的。如果想要仅仅匹配键值为null的文档,纪要检查该键的值是否为null,也要通过$exists条件判定键值已存在。

1
db.news.find({z:{$in: [null], $exists: true}})

正则表达式

1
db.news.find({title: /test/i})

$where

1
db.news.find({$where: "this.x + this.y== 10"})

不是非常必要时,一定要避免使用$where查询,因为在速度上比常规查询慢很多。

游标

数据库使用游标来返回find的执行结果。客户端对游标的实现,通常能够对最终结果进行控制。可以限制结果的数量,略过部分结果,根据任意方向任意键的组合对结果进行各种排序。

limit、skip和sort

要限制查询结果数量,在find后使用limit函数

1
db.news.find({id: 4}).limit(2)

skip与limit类似,用来忽略前n个文档,返回剩余的文档。(用来分页是不错的)

1
db.news.find({id: 4}).skip(1)

sort用一个对象作为参数: 一组键/值对,键对应文档的键名,值代表排序方向。排序方向可以是1(升序)或者-1(降序)。如果指定了多个键,则按照多个键的顺序逐个排序。

1
db.news.find().sort({id: 1, date: -1})

使用limit、skip和sort组合使用,对于分页非常有用。但是略过过多,会导致性能问题。

MongoDB处理不同类型的数据是有一个顺序的,有时候一个键的值可能是多种类型的。如果对这种混合类型的键进行排序,其排序顺序是预先定义好的。从小到大,顺序如下:

  • 最小值
  • null
  • 数字(整型、长整型、双精度)
  • 字符串
  • 对象/文档
  • 数组
  • 二进制数据
  • 对象ID
  • 布尔型
  • 日期型
  • 时间戳
  • 正则表达式
  • 最大值