将id作为ObjectId存储到相关文档与将其存储为字符串文字有什么好处?
使用ObjectID:
{
"_id": ObjectId("522bb79455449d881b004d27"),
"username": "admin",
"folder": ObjectId("522bb79455449d881b004d23")
}
Run Code Online (Sandbox Code Playgroud)
与字符串:
{
"_id": ObjectId("522bb79455449d881b004d27"),
"username": "admin",
"folder": "522bb79455449d881b004d23"
}
Run Code Online (Sandbox Code Playgroud)
对于我将数据发送回客户端的API ...使用字符串意味着我不必"清理"数据......而且我们必须进行第二次查询以获取文件夹文档. ..是否值得使用ObjectId?(如果是这样,为什么?)
谢谢
Chr*_*ald 19
最大的原因是ObjectIDs是12个字节,而等效的字符串是24个字节.在足够大的集合中,每个ID保存的12个字节真的加起来!这些ID也意味着在读取或写入文档时通过线路传输的字节更少.
此外,一些ODM期望ObjectID用于外部文档引用,并且可能会被ID的字符串版本混淆.我对PHP ODM不够熟悉,但是如果这可能会影响到你.
但是,关于API的东西,你可能应该在将数据发送到客户端之前对数据进行规范化,因为由于Mongo没有强制执行模式,所以你可以在给定的字段中包含任何类型的数据,所以你可能会有一些文件有字符串ID,有些文件有BSON ID,你的API很乐意将它们发送到客户端,但是其中一个可能会导致破坏.在这种特殊情况下,您应该在文档中使用BSON ObjectID,然后将它们转换为API输出中的字符串.
小智 6
简单地说,例如,如果您缩短提起命名last_name
来lname
,你可以保存每个文档9个字节。如果您的收藏集中有数百万个文档,这确实会有所作为。