$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"操作符同时使用。