MongoDB - $ gte和$ lte返回不正确的结果 - 奇怪的行为

时间:2017-09-24 02:54:22

标签: mongodb mongoose

我绝对难过,不知道为什么会这样。在MongoDB中,我有一个简单的集合如下:

{
        "_id" : ObjectId("59bf7291d58e7c23182465f0"),
        "weekly_rent" : "299",
        "__v" : 0
}
{
        "_id" : ObjectId("59bf8264d58e7c23182465f1"),
        "weekly_rent" : "199",
        "__v" : 0
}
{
        "_id" : ObjectId("59bf9fe4d58e7c23182465f2"),
        "weekly_rent" : "899",
        "__v" : 0
}
{
        "_id" : ObjectId("59c4e3316d55c10430d4ab16"),
        "weekly_rent" : "150",
        "__v" : 0
}
{
        "_id" : ObjectId("59c4e3726d55c10430d4ab17"),
        "weekly_rent" : "120",
        "__v" : 0
}
{
        "_id" : ObjectId("59c4e3aa6d55c10430d4ab18"),
        "weekly_rent" : "190",
        "__v" : 0
}
{
        "_id" : ObjectId("59c4e3e76d55c10430d4ab19"),
        "weekly_rent" : "230",
        "__v" : 0
}
{
        "_id" : ObjectId("59c4e42f6d55c10430d4ab1a"),
        "weekly_rent" : "100",
        "__v" : 0
}
{
        "_id" : ObjectId("59c4e4616d55c10430d4ab1b"),
        "weekly_rent" : "400",
        "__v" : 0
}

当我使用:

执行搜索时
db.listings.find({weekly_rent: { $gte: "100", $lte: "300" }}).pretty()

我使用包含weekly_rents的对象获得预期结果:100,230,190,120,150,199,299

但是当我使用:

执行搜索时
db.listings.find({weekly_rent: { $gte: "99", $lte: "300" }}).pretty()

我绝对没有回复给我的结果。当大于或等于"大于或等于"为什么我什么也得不到值已更改为99,因为所有这些值都大于99。

这是否与值为100的最低weekly_rent对象有关?

这里发生了什么,为什么我的查询不起作用?我很难过,无法找到任何相关信息。感谢您的回答。

1 个答案:

答案 0 :(得分:2)

您的字段和搜索参数是字符串,因此您需要进行字典比较。就像"zz" > "daa"一样,"99" > "300"。如果要使用数字运算,则应将这些值存储为数字。