我对Mongo DB使用ObjectIds感到有些困惑.当然,它们非常适合创建ID客户端,几乎肯定不会与其他客户端创建的ID冲突.但是mongo似乎以某种特殊的方式存储它们.存储id的字符串表示与将对象id存储为对象不同.为什么是这样?
字符串表单是否具有对象表单具有的所有相同信息?mongo为什么要这么长时间来区分这两种形式呢?当我尝试比较从前端发送的_ids时,它会搞砸我.我的数据库与它是否存储字符串形式的id或对象形式id无关,而且我的代码肯定是部分责备,我主要责怪mongo让它变得如此奇怪.
我错了,这很奇怪吗?为什么mongo这样做?
Sam*_*aye 27
我个人责怪你的代码.我通过编码正确的方式在我的应用程序中完美地解决了这个问题.我在代码中转换为字符串进行比较,并确保看起来像a的任何内容ObjectId
实际上都用作a ObjectId
.
值得注意的是,在ObjectId
(http://docs.mongodb.org/manual/reference/object-id/)和它的十六进制表示之间实际上存在12个字节的差异,即ObjectId
12个字节,它的十六进制表示为24.
它不仅关于存储效率,还关于索引; 不仅因为它们更小,而且因为它ObjectId
可以以特殊方式使用,以确保只加载索引的一部分; 使用的部件.这在插入时变得最明显,其中只需要加载该索引的最新部分以确保唯一性.您不能使用其十六进制表示来保证此类行为.
我强烈建议你不要使用OjbectId
十六进制表示法.如果你想"让自己的生活变得更轻松",你最好创造一个_id
更小但不同的独特和索引友好的不同.
ObjectId
在内部存储时为12个字节,比其十六进制字符串表示形式更紧凑。两者是不同的东西。
您可以重排整个数据库,并使用统一的_id
字段来解决此问题,并确保您的代码以相同的格式保存。ObjectId
MongoDB可以快速生成,因此在创建新文档时会用到它。
归档时间: |
|
查看次数: |
14117 次 |
最近记录: |