一个mongo数据库的小问题
post表保存了15条数据, 我的指令是db.posts.find({“postid”:{$gte:“1”,$lte:“10”}}) 我想查询的事postid大于0,小于等于10的数据,应该是10条,但只查出了两个数据,一条postid为1,还有一条是postid为10.
5 回复
字符串引号?
db.posts.insert({m: 1})
db.posts.insert({m: 2})
db.posts.insert({m: 3})
db.posts.insert({m: 4})
db.posts.insert({m: 5})
db.posts.insert({m: 6})
db.posts.find({m: {$gte: 2, $lte: 4}})
{ "_id" : ObjectId("515eb93170930cfcf86b6d77"), "m" : 2 }
{ "_id" : ObjectId("515eb93370930cfcf86b6d78"), "m" : 3 }
{ "_id" : ObjectId("515eb93470930cfcf86b6d79"), "m" : 4 }
db.posts.find({m: {$gte: "2", $lte: "4"}})
/* 结果有问题 */
楼主本意应该是作数字大小的比较(2<="10" ===true
),但按照mongo语法此查询是字符串大小的比较("2"<="10" ===false
)。解决方法有2个(或许还有其他方法,下面同学补充吧)
一、postid若确定全为数字,以数值型存入数据库,不要加多余的双引号。此前提下,如楼上正确查询为:
db.posts.find({postid:{$gte:1,$lte:10}})
二、postid若仅部分为数字,有可能掺入字母,是字符型。此前提下,退而求其次,采取性能低下的查询方式:
db.posts.find("this.postid>=1 && this.postid<=10")
感谢
非常感谢你的回复,非常详细,我知道哪里出问题了,你的两种方法我都带进去试过了,第二种没有问题,第一种没有结果。
你的是对的,我再看了一下我的数据库里的值的类型,是string的。真心感谢你的回帖,谢谢