我从mongodb的网站上收集了以下BIOS资料
http://docs.mongodb.org/manual/reference/bios-example-collection/
现在,假设我需要找到所有曾获奖的用户,但不在2001年和2011年
我试图给我们$ nin和$ in,但结果却出乎意料
db.bios.count({awards: {$elemMatch:{ year:{ $nin:[2001,2011] } }}});
//returns 7 - not expected
和
db.bios.count({awards: {$elemMatch:{ year:{ $in:[2001,2011] } }}});
//returns 4 - expected
我想念什么?
您当前的$nin
查询正在计算文档中至少一个awards
数组元素包含2001和2011以外的年份的文档。
使用$nin
no$elemMatch
来匹配文档,在该文档中任何$nin
数组值均不出现在任何元素中。
db.bios.count({'awards.year': {$nin:[2001,2011]}});
但这也将包括没有任何 awards
条目的文档。因此,要获得至少获得一个奖项(即曾经获得过奖项的用户)的文档的数量,而在2001或2011年都没有获得该奖项的文档,您需要$and
使用限定词来确保awards
至少包含一个要素:
db.bios.count({$and: [
{'awards.year': {$nin:[2001,2011]}},
{'awards.0': {$exists: true}}
]});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句