gpt4 book ai didi

javascript - MongoDB:String ID 的 $lt 比较等同于 ObjectID 比较吗?

转载 作者:可可西里 更新时间:2023-11-01 10:42:12 34 4
gpt4 key购买 nike

所以我将 post 的 ObjectId 存储在 comment BSON 中。我的 BSON 架构示例如下:

{ "_id" : ObjectId("570175e6c002e46edb92aaa5"), "userid" : "56f3f70d4de8c74a69d1d5e1", "postid" : "5700edfe03fcdb000347beaa" }

现在,我想找到 postid 5700edfe03fcdb000347bebc 下的所有帖子。

所以我去:

"$match" : {
"postid" : {
"$lt" : "5700edfe03fcdb000347bebc"
}
}

但是,$lt 聚合运算符比较的是 String ID 而不是 ObjectID,并且返回的结果仍然准确。所以,如果这是我的 postids 列表:

{ "_id" : "5700edfe03fcdb000347beda" }
{ "_id" : "5700edfe03fcdb000347bebf" }
{ "_id" : "5700edfe03fcdb000347bebc" }
{ "_id" : "5700edfe03fcdb000347bebb" }
{ "_id" : "5700edfe03fcdb000347beaa" }
{ "_id" : "5700edfb03fcdb000347bebe" }
{ "_id" : "5700edfb03fcdb000347beba" }

它将返回:

{ "_id" : "5700edfe03fcdb000347bebb" }
{ "_id" : "5700edfe03fcdb000347beaa" }
{ "_id" : "5700edfb03fcdb000347bebe" }
{ "_id" : "5700edfb03fcdb000347beba" }

但是,我想知道这是否永远正确,或者以上只是运气?

我理解排序ObjectID总是会返回一个准确的结果,因为ObjectId里面有一个时间戳,所以它可以使用时间戳来准确排序ObjectId。字符串中没有时间戳,排序会准确吗?

最佳答案

Mongo 使用 ASCII-betically 字符串比较,区分大小写。在这种情况下,这会起作用,但在性能方面考虑 - 它很慢。

由于objectId字段是一个12bit的对象,所以string中等价的string会占用更多的空间,有两个文档

{
"_id" : ObjectId("575f2aa031dcfb59af388e1f"),
"a" : 2.0,
"id" : "575f2a5731dcfb59af388e1e"
},{
"_id" : ObjectId("575f2ab031dcfb59af388e21"),
"a" : 3.0,
"id" : ObjectId("575f2ab031dcfb59af388e20")
}

并检查尺寸:

Object.bsonsize(db.test.findOne({a:2})) // returns 66
Object.bsonsize(db.test.findOne({a:3})) // returns 49

使用 objeciId 时减少 17 个字节。

这款游戏值得交易吗?是的,当字段被索引时——索引文件更小 => 更快,读取更少,性能更高

关于javascript - MongoDB:String ID 的 $lt 比较等同于 ObjectID 比较吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37796766/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com