在MongoDb中使用$ gt和$ lt和字母

时间:2014-09-29 19:49:20

标签: mongodb

我有这个集合

db.persone.find()

{
    "_id" : ObjectId("5429b4bdd16acba384618d09"),
    "nome" : "Alessio"
}

{
    "_id" : ObjectId("5429b4bdd16acba384618d0a"),
    "nome" : "Claudia"
}

{
    "_id" : ObjectId("5429b4bdd16acba384618d0b"),
    "nome" : "Barbara"
}

{
    "_id" : ObjectId("5429b4bdd16acba384618d0c"),
    "nome" : "Marco"
}

{
    "_id" : ObjectId("5429b4bdd16acba384618d0d"),
    "nome" : "Arianna"
}

如果我这样做

db.persone.find({nome:{$gt:'A'}})我的结果相同

如果我这样做

db.persone.find({nome:{$lt:'B'}})我有这个结果

{
    "_id" : ObjectId("5429b4bdd16acba384618d09"),
    "nome" : "Alessio"
}

{
    "_id" : ObjectId("5429b4bdd16acba384618d0d"),
    "nome" : "Arianna"
}

$lte相同的结果。

我的问题是

为什么使用$lt$lte,字母' B'不包括与$gt类似的内容吗?

在这种情况下,$gt代替$gte$lt代替$lte会有什么不同。

1 个答案:

答案 0 :(得分:3)

关于这个主题here有一个不错的教程。

基本上,它会按字典顺序比较字符串,一次一个字符,如果不确定,它将比较下一个字符。

在你的$gt示例中,您要比较的唯一字符是A,但您可以将其视为隐藏的“终止”字符,表明一切都大于。因此,如果您将A视为第二个字符,请说\n(其实际上是空字符\ u0000,但更难显示),然后在A\n的比较中Alessio\n,它会将AA进行比较,无法确定,然后继续比较l\n并看到l }> \n,因此它得出的结论是整个字符串Alessio大于A

相反,使用$lt运算符,在将B\nBarbara\n进行比较时,它将达到比较a< \n(请记住终止字符总是少),评估结果为False,因此Barbara不小于B