我有来自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
我错过了什么?
答案 0 :(得分:2)
您当前的$nin
查询计算的文档中至少有一个awards
数组元素包含2001年和2011年以外的年份。
使用不$nin
的{{1}}来匹配任何元素中没有$elemMatch
数组值的文档。
$nin
但是,这也包括没有任何 db.bios.count({'awards.year': {$nin:[2001,2011]}});
条目的文档。因此,要计算至少有一个奖项(即赢得奖项的用户)的文档,但在2001年或2011年没有,您需要awards
在限定符中确保$and
至少有一个元素:
awards