将文档的id作为ObjectId或String保存在另一个文档中是否更好?

Dee*_*tha 5 mongodb

让我们看一个简单的"坏"示例:假设我有2个集合'person'和'address'.并假设在'地址'中我想存储与地址相关联的人的'_id'.在"地址"集合中将这个"参考密钥"项存储为ObjectId vs string是否有任何好处?

我觉得将它们存放为字符串不应该受到伤害,但我没有在mongo工作很长时间,如果我遵循这种模式,我不知道它是否会伤害你的道路.

我在这里阅读帖子:将_Id存储为MongoDB中的对象或字符串? 并且它说ObjectId更快,如果你使用父集合中的ObjectId获取/更新(例如,使用person._id作为ObjectId获取/更新'person'集合),我认为它是真的,但我找不到任何暗示如果通过其他集合中的字符串id表示进行搜索(在我们的示例中,通过person._id作为字符串搜索地址集合)的情况,则可能是真的

非常感谢您的反馈.

Der*_*ick 9

无论性能如何,您都应该以与您引用的_id字段相同的格式存储"引用键".这意味着,如果您的推荐文件是:

{ _id: ObjectID("68746287..."), value: 'foo' }
Run Code Online (Sandbox Code Playgroud)

然后你会把它称为:

{ _id: ObjectID(…parent document id…), subDoc: ObjectID("68746287...")
Run Code Online (Sandbox Code Playgroud)

如果您指向的文档有一个字符串作为ID,那么它看起来像:

{ _id: "derick-address-1", value: 'foo' }
Run Code Online (Sandbox Code Playgroud)

然后你会把它称为:

{ _id: ObjectID(…parent document id…), subDoc: "derick-address-1" }
Run Code Online (Sandbox Code Playgroud)

除此之外,因为你在谈论人和地址,所以在两个文件中完全没有它们可能更有意义,而是嵌入文档:

{ _id: ObjectID(…parent document id…),
  'name' : 'Derick',
  'addresses' : [
     { 'type' : 'Home', 'street' : 'Victoria Road' },
     { 'type' : 'Work', 'street' : 'King William Street' },
  ]
}
Run Code Online (Sandbox Code Playgroud)