我有这些收藏
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
,这有什么不同。
发布于 2014-09-30 04:19:14
在主题here上有一个很不错的教程。
基本上,它将按字典顺序比较字符串,一次一个字符,如果不确定,它将比较下一个字符。
在您的$gt
示例中,提供给它进行比较的唯一字符是A
,但是您可以认为它有一个隐藏的“终止”字符,所有字符都大于该字符。因此,如果您认为A
有第二个字符,假设\n
(它实际上是空字符\u0000,但这更难显示),那么在A\n
与Alessio\n
的比较中,它会将A
与A
进行比较,无法确定,然后继续将l
与\n
进行比较,并看到l
><代码>D12,因此它得出结论,整个字符串<代码>D13大于<代码>D14。
相反,使用$lt
运算符时,当比较B\n
与Barbara\n
时,将得出比较结果a
< \n
(记住,终止字符始终小于),其计算结果为False
,因此Barbara
不小于B
。
https://stackoverflow.com/questions/26107722
复制相似问题