在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
是否始终只需要检查第一个字符?谢谢