MongoDB的命名规范是什么?

281

是否有一组MongoDB实体的首选命名约定,例如数据库、集合和字段名称?

我考虑的命名约定如下:

  • 数据库:以目的(单数词)开头并以“db”结尾 - 全部小写: imagedb、resumedb、memberdb等。
  • 集合:复数形式且全小写: images、resumes等。
  • 文档字段:lowerCamelCase,例如memberFirstName、fileName等。
6个回答

184
  1. 保持简洁:优化小对象的存储SERVER-863。愚蠢但却是真的。

  2. 我想几乎与关系型数据库适用相同的规则也适用于这里。经过这么多年后,仍然没有统一的意见,关于RDBMS表格应该使用单数或复数...

  3. MongoDB使用JavaScript,所以采用camelCase命名约定。

  4. MongoDB官方文档提到可以使用下划线,还有内置标识符名为_id(但这可能是为了指示_id是私有的、内部的,永远不会显示或编辑)。


118
3和4有些矛盾——JS偏好驼峰式命名,Mongo似乎更喜欢下划线……但是如果不确定,最好选择下划线。习惯非拉丁字母的人会感激你。 - Matt Zukowski
2
请参考以下问题,讨论单数和复数的使用:https://dev59.com/-XRC5IYBdhLWcg3wUfN2 - Jason
6
我不确定是否应该说“JS偏爱驼峰式命名法”。JS本身没有偏好,但或许可以说大多数JS程序员倾向于使用驼峰式命名法。 - treeface
7
@treeface,我认为Matt指的是JS内置方法在Node和浏览器中都使用驼峰式命名。 - Luke Taylor
4
内置标识符“_id”很可能以下划线为前缀,遵循JavaScript的惯例,表明该键是内部/私有键。换句话说,“_id”不打算被编辑或呈现给查看集合数据的任何人。 - Beau Smith
显示剩余6条评论

135

数据库

  • 使用驼峰式命名法
  • 在名称末尾添加DB
  • 使用单数形式(集合为复数形式)

MongoDB提供了一个很好的例子:

要选择要使用的数据库,在mongo shell中,发出use <db>语句,如下面的示例所示:

use myDB
use myNewDB

内容来自:https://docs.mongodb.com/manual/core/databases-and-collections/#databases

集合

对于集合名称,我遵循以下建议模式,直到找到官方的MongoDB文档: - 小写名称:避免大小写敏感问题,MongoDB集合名称是区分大小写的。 - 复数形式:将一组东西标记为复数更加明显,例如“文件”而不是“文件”。 - 没有单词分隔符:避免不同人(错误地)分离单词(用户名<->user_name,first_name<->firstname)。这个问题根据一些人的说法还存在争议,但只要争论局限于集合名称,我认为就没有问题;)如果您发现通过添加下划线或使用camelCasing来改善集合名称的可读性,则该集合名称可能过长或应使用适当的句点进行分类,这是集合分类的标准。 - 使用点表示法表示更高级别的集合:给出了一些关于集合之间关系的指示。例如,如果删除了“users”,则可以合理地确定可以删除“users.pagevisits”,前提是设计架构的人做得很好。
来源: https://web.archive.org/web/20190313012313/http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

小写名称:避免大小写敏感问题,但前提是每个人都知道使用小写。即使如此,引擎也应该能够识别“CollectionA”和“collectionA”之间没有(也不应该有)逻辑差异。 - StingyJack
值得注意的是,似乎没有官方的集合名称约定。尽管社区已经建立了自己的惯例,例如 Mongoose 库(除非另有规定)选择默认的集合名称,即模型名称转换为小写并复数形式。例如,Videovideos - Seth Falco
文件字段也使用lowerCamelCase,例如https://www.mongodb.com/docs/manual/core/timeseries/timeseries-procedures/ - Ilya Petukhov
文档字段也使用lowerCamelCase命名规范,例如https://www.mongodb.com/docs/manual/core/timeseries/timeseries-procedures/。 - undefined

33
即使没有关于此的约定,对于一对一关系,手动引用在Mongo文档中始终以被引用集合命名。名称总是遵循<document>_id结构。
例如,在一个dogs集合中,一个文档将具有以下命名的外部文档的手动引用:
{
  name: 'fido',
  owner_id: '5358e4249611f4a65e3068ab',
  race_id: '5358ee549611f4a65e3068ac',
  colour: 'yellow'
  ...
}

这遵循了Mongo的命名惯例,将_id作为每个文档的标识符。

1
我在我的回答中没有提到camelCase,所以我会使用owner_id - danza

13

集合的命名约定

为了给集合命名,需要注意以下几点:

  1. 空字符串(“”)不能作为集合名称。
  2. 集合名称不应包含空字符,因为这定义了集合名称的结尾。
  3. 集合名称不应以前缀“system.”开头,因为此前缀保留用于内部集合。
  4. 最好不要在集合名称中包含字符“$”,因为对于数据库可用的各种驱动程序不支持集合名称中的字符“$”。

创建数据库名称时需要记住以下事项:

  1. 空字符串(“”)不能作为数据库名称。
  2. 数据库名称不能超过64个字节。
  3. 数据库名称区分大小写,即使在大小写不敏感的文件系统上也是如此。因此最好将名称保持小写。
  4. 数据库名称不能包含以下任何字符:“/”,“\”,“。”,“*”,“<”,“>”,“:”,“|”,“?”,"$"。它也不能包含单个空格或空字符。

有关更多信息,请查看以下链接:http://www.tutorial-points.com/2016/03/schema-design-and-naming-conventions-in.html


7
我认为这完全是个人喜好的问题。我的偏好来自于在.NET中使用SQL Server的NHibernate,所以它们可能与其他人使用的不同。
  • 数据库:所使用的应用程序。例如:Stackoverflow
  • 集合:名称单数形式,表示集合的内容。例如:Question
  • 文档字段:例如:MemberFirstName
老实说,这并不太重要,只要在项目中保持一致即可。开始工作吧,不必太担心细节 :P

1
我认为可能会产生后果的是文档字段,因为它们将存储在每个文档内部。正如Tomasz所指出的那样,保持它们简短应该可以节省空间/带宽。不过,我认为更重要的是使用一些易于理解的东西。 - Rex Morgan

3

在我们解决SERVER-863之前,尽可能使用短的字段名是明智的,特别是在您有大量记录的情况下。

根据您的用例,字段名称可能对存储产生巨大影响。无法理解为什么这不是MongoDb的更高优先级,因为这将对所有用户产生积极影响。如果没有别的,我们可以开始使用更具描述性的字段名称,而不必考虑带宽和存储成本。

投票支持。


3
仅供未来可能的读者更新,MongoDB现在可以进行压缩,因此长字段名称不再是问题。 - Hubro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接