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

在MongoDb中对字母使用$gt和$lt,mongodb,Mongodb,我有这个收藏 db.persone.find() { "_id" : ObjectId("5429b4bdd16acba384618d09"), "nome" : "Alessio" } { "_id" : ObjectId("5429b4bdd16acba384618d0a"), "nome" : "Claudia" } { "_id" : ObjectId("5429b4bdd16acba384618d0b"), "nome" : "Ba

我有这个收藏

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
有一个关于这个主题的不错的教程

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

在您的
$gt
示例中,您给它比较的唯一字符是
A
,但您可以将其视为一个隐藏的“终止”字符,所有字符都大于该字符。因此,如果您想到带有第二个字符的
A
,比方说
\n
(它实际上是一个空字符\u0000,但这更难显示),那么在将
A\n
alesio\n
进行比较时,它会将
A
A
进行比较,无法确定,然后继续并将
l
\n
进行比较,查看
l
\n
,因此得出结论,整个字符串
alesio
大于
A


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

是否始终只需要检查第一个字符?谢谢