MongoDB高级查询 互动版

$size数组元素个数

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

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

对于记录

{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }

匹配的查询:

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

不匹配的查询:

db.users.find({favorite_number: {$size: 2}});

得到一个长度范围内的文档是一种常见的查询。$size并不能与其他查询条件(比如$gt) 组合使用,但是这种查询可以通过在文档中添加一个"size"键的方式来实现。这样每一次向 指定数组添加元素时,同时增加"size"的值。比如,原来这样的更新:

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

就要变成下面这样:

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

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

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

很遗憾,这种技巧并不能与"$addToSet"操作符同时使用。