发布
社区首页 >问答首页 >在MongoDb中使用带字母的$gt和$lt

在MongoDb中使用带字母的$gt和$lt
EN

Stack Overflow用户
提问于 2014-09-30 03:49:20
回答 1查看 2.1K关注 0票数 1

我有这些收藏

代码语言:javascript
代码运行次数:0
复制
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'}})我有这样的结果

代码语言:javascript
代码运行次数:0
复制
{
    "_id" : ObjectId("5429b4bdd16acba384618d09"),
    "nome" : "Alessio"
}

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

我在$lte上也得到了同样的结果。

我的问题是

为什么在$lt$lte中,字母'B‘不像在$gt中包含

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

EN

回答 1

Stack Overflow用户

发布于 2014-09-30 04:19:14

在主题here上有一个很不错的教程。

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

在您的$gt示例中,提供给它进行比较的唯一字符是A,但是您可以认为它有一个隐藏的“终止”字符,所有字符都大于该字符。因此,如果您认为A有第二个字符,假设\n (它实际上是空字符\u0000,但这更难显示),那么在A\nAlessio\n的比较中,它会将AA进行比较,无法确定,然后继续将l\n进行比较,并看到l ><代码>D12,因此它得出结论,整个字符串<代码>D13大于<代码>D14。

相反,使用$lt运算符时,当比较B\nBarbara\n时,将得出比较结果a < \n (记住,终止字符始终小于),其计算结果为False,因此Barbara不小于B

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26107722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档