$exists判断字段是否存在

查询所有存在age 字段的记录

  1. db.users.find({age: {$exists: true}});

大小比较操作符

<, <=, >, >= 这个操作符就不用多解释了,最常用也是最简单的。

  1. db.collection.find({ "field" : { $gt: value } } ); // 大于: field > value
  2. db.collection.find({ "field" : { $lt: value } } ); // 小于: field < value
  3. db.collection.find({ "field" : { $gte: value } } ); // 大于等于: field >= value
  4. db.collection.find({ "field" : { $lte: value } } ); // 小于等于: field <= value

如果要同时满足多个条件,可以这样做

  1. db.collection.find({ "field" : { $gt: value1, $lt: value2 } } ); // value1 < field < value2

Null空值处理

在users文档找出”sex”值为”null”并且字段存在的记录。

  1. > db.users.find({sex:{"$in":[null], "$exists":true}});

$mod取模运算

查询age 取模6 等于1 的数据

  1. > db.c1.find({age: {$mod : [ 6 , 1 ] } })
  2. { "_id" : ObjectId("4fb4af85afa87dc1bed94330"), "age" : 7, "length_1" : 30 }

$ne不等于

在users文档中查询”age”不等于20的记录:

  1. db.users.find({age:{$ne:20}});

$size数组元素个数

$size对于查询数组来说是非常有用的,顾名思义,可以用它查询特定长度的数组。例如:

  1. > db.users.find({favorite_number: {$size: 3}})

$size并不能与其他查询条件(比如$gt) 组合使用,但是这种查询可以通过在文档中添加一个”size”键的方式来实现。这样每一次向 指定数组添加元素时,同时增加”size”的值。比如

  1. > db.users.update(criteria,{"$push":{"favorite_number":"1"},"$inc":{"$size":1}})

自增操作的速度非常快,所以对性能的影响微乎其微。这样存储文档后,就可以像下面这样查询了:

  1. > db.users.find({"$size":{"$gt":3}})

$regex正则表达式匹配

查询name字段以B开头的记录

  1. db.users.find({name: {$regex: /^B.*/}});

forEach遍历游标

MongoDB 还有另一种方式来处理游标,即forEach()方法:

  1. > db.t3.find().forEach( function(u) { printjson(u); } );