一个mongo数据库的小问题
发布于 2年前 作者 384324085 1225 次浏览

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的。真心感谢你的回帖,谢谢

回到顶部