在MongoDb中,将$gt和$lt与字母一起使用

  • 本文关键字:一起 MongoDb 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有什么不同。

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

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

在您的$gt示例中,您给它比较的唯一字符是A,但您可以将其视为存在一个隐藏的"终止"字符,所有字符都大于该字符。因此,如果你认为A有第二个字符,比如n(它实际上是一个空字符\u0000,但更难显示),那么在比较AnAlession时,它会比较AA,无法确定,然后继续比较ln,看到l>n,因此得出整个串CCD_ 23大于CCD_。

相反,对于$lt运算符,当它将BnBarbaran进行比较时,它将达到比较a<n(记住终止字符总是较少),其求值为False,因此Barbara不小于B

相关内容

最新更新