【发布时间】:2016-03-17 04:31:04
【问题描述】:
让我们举一个简单的“坏”示例:假设我有 2 个集合“人”和“地址”。并假设在“地址”中我想存储与地址相关联的人的“_id”。将此“引用键”项存储为“地址”集合中的 ObjectId 与字符串有什么好处?
我觉得将它们存储为字符串应该不会受到伤害,但我在 mongo 中工作的时间不长,不知道如果我遵循这种模式是否会受到伤害。
我在这里阅读了这篇文章:Store _Id as object or string in MongoDB? 它说 ObjectId 更快,如果您使用父集合中的 ObjectId 获取/更新,我认为它是正确的(例如,使用 person._id 作为 ObjectId 获取/更新“人”集合),但我找不到如果在其他集合中按字符串 id 表示搜索,任何暗示相同的东西都可能是正确的(在我们的示例中,按 person._id 作为字符串在地址集合中搜索)
非常感谢您的反馈。
【问题讨论】:
-
这是一个不同的问题? ObjectId 以 12 个字节存储。具有 ObjectId 的十六进制字符的字符串为 24 字节(仅用于字符,加上尾随然后加上大小参考)。更多空间,更多时间。慢点!这应该不难解决。
-
你是对的,正在尝试使用 ember 数据来解决问题,并没有看到将 objectid 转换为 string 并返回 objectId 的意义,我正在寻找便利而不是性能。今天早上我做了一个搜索,这个问题也以其他形式提出过。
-
为了记录,您在此处接受的答案提出了另一个重要的观点。如果不手动重新转换为字符串或 ObjectId 值,则无法将不同“类型”上的事物匹配在一起。就我个人而言,我真的更喜欢所有外部 API 都使用扩展的 JSON 格式
{ "_id": { "$oid": "56ea9e8bb1e015d13b376db5" } },因为如果我的客户端实际上可以反序列化回ObjectId,那么我会让它知道数据实际上是什么。
标签: mongodb