【问题详细描述】
用户错误使用$and,从而导致其得不到正确结果。
如图"附件1.png"所示,在使用如下命令时,希望count的结果满足dt字段大于等于20161001,且小于20161003:
1)
db.cs.cl.count({dt:{$gte:20161001,$lt:20161003}})
统计结果正确
2)
db.cs.cl.count({$and:[{dt:{$gte:20161001}},{dt:{$lt:20161003}}]})
统计结果正确
3)
db.cs.cl.count({dt:{$gte:20161001},dt:{$lt:20161003}})
统计结果不正确
4)
db.cs.cl.count({dt:{$gte:20161001}},{dt:{$lt:20161003}})
统计结果不正确
为什么3、4条命令统计结果不正确?
【解决办法】
1、在第三条命令:
db.cs.cl.count({dt:{$gte:20161001},dt:{$lt:20161003}})
中,json格式存在问题,在json格式中,同一级下面不能有相同的key,否则只会有一个生效, 如:
{key1:value1, key1:value2} {key1:value2}
,即此条命令只有dt:{$lt:20161003}生效。如果需要结合多个查询条件, 请使用数组格式
:{$and:[{key1:value1}, {key1:value2}]}
2、在第四条命令:
db.cs.cl.count({dt:{$gte:20161001}},{dt:{$lt:20161003}})
中,由于count只需要一个json参数,所以count将会忽略除第一个以外的json参数,即此条命令的查询结果为dt字段大于等于20161001的记录。 count的参考文档:http://doc.sequoiadb.com/cn/index-cat_id-1432190828-edition_id-0
【参考链接】
错误码
常见错误处理指南