MongoDB的命名约定是什么?


186

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

我在沿着这些思路思考:

  • 数据库:由目的(单数单词)组成,以“ db”结尾–所有小写:imagedb,resumedb,memberdb等。
  • 收藏:小写复数:图片,履历,
  • 文档字段:lowerCamelCase,例如memberFirstName,fileName等

Answers:


126
  1. 简短说明:优化小对象的存储SERVER-863。愚蠢但真实。

  2. 我猜适用于关系数据库的规则几乎相同。几十年后,仍然没有达成共识,RDBMS表是应命名为单数还是复数。

  3. MongoDB使用JavaScript,因此请使用camelCase的JS命名约定。

  4. MongoDB官方文档提到您可以使用下划线,还命名了内置标识符_id(但这可能是为了表明其_id意图是私有的,内部的,从不显示或编辑的。


95
3和4有点矛盾-JS更喜欢驼峰法,Mongo似乎更喜欢下划线...但是有疑问时,请使用下划线。习惯了非拉丁字母的人会感谢您。
Matt Zukowski

1
看到这个问题进行单数还是复数辩论:stackoverflow.com/questions/338156/…–
Jason

4
我不确定我会说“ JS更喜欢骆驼皮”。JS本身没有偏好,但是可以说大多数 JS程序员倾向于使用驼峰式大小写。
2016年

1
@treeface我认为Matt指的是JS的内置方法在节点和浏览器中都使用camelCase的事实
Luke Taylor

1
内置标识符_id最有可能带有下划线前缀,以遵循通用的JavaScript约定,该约定表明该密钥应为内部/私有密钥。换句话说,_id不应将其编辑或呈现给任何查看集合数据的人。
博·史密斯

56

数据库

  • 骆驼香烟盒
  • 在名称末尾附加DB
  • 使单数(集合为复数)

MongoDB给出了一个很好的例子:

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

使用myDB
使用myNewDB

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

集合

  • 小写名称:避免大小写敏感的问题,MongoDB集合名称区分大小写。

  • 复数:将某物的集合标记为复数更为明显,例如“文件”而不是“文件”

  • >没有单词分隔符:避免出现由不同的人(不正确地)分隔单词(用户名<->用户名,
    名字_ <<> 名字)的问题。
    围绕着这里的一些人,这是一个有待讨论的话题,但前提是该参数与馆藏名称无关,我认为不应该这样;)如果您发现自己
    通过添加下划线或
    驼色来提高馆藏名称的可读性名称可能太长,或应使用
    适当的句点,这是集合
    分类的标准。

  • 较高详细信息集合的点符号:给出一些有关集合如何关联的指示。例如,如果设计模式的人员做得很好,则可以确定如果删除“用户”,则可以删除“ users.pagevisits”。

内容来自:http : //www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

对于集合,我会遵循这些建议的模式,直到找到正式的MongoDB文档。


25

即使未对此指定任何约定,对于Mongo文档中的一对一关系,手动引用也始终以Mongo文档中引用的集合命名。该名称始终遵循结构<document>_id

例如,在一个dogs集合中,文档将具有对这样命名的外部文档的手动引用:

{
  name: 'fido',
  owner_id: '5358e4249611f4a65e3068ab',
  race_id: '5358ee549611f4a65e3068ac',
  colour: 'yellow'
  ...
}

这遵循_id为每个文档命名标识符的Mongo约定。


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

7

集合命名约定

为了命名集合,需要采取一些预防措施:

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

    创建数据库名称时要记住的事情是:

  5. 空字符串(“”)的数据库不是有效的数据库名称。
  6. 数据库名称不能超过64个字节。
  7. 数据库名称区分大小写,即使在不区分大小写的文件系统上也是如此。因此,最好使用小写字母。
  8. 数据库名称不能包含以下任何字符“ /、\、.、”、*、<、>、:、|、?、$,”。它也不能包含单个空格或空字符。

想要查询更多的信息。请检查以下链接:http : //www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html


3

我认为这都是个人喜好。我的喜好来自在.NET和SQL Server中使用NHibernate,因此它们可能与其他人使用的有所不同。

  • 数据库:正在使用的应用程序。例如:Stackoverflow
  • 集合:单数名称,它将是什么集合,例如:问题
  • 文档字段,例如:MemberFirstName

老实说,只要项目与项目保持一致,就没什么大不了的。刚开始工作,不要大惊小怪:P


1
我认为可能会导致后果的是文档字段,因为它们将存储在每个文档中。正如Tomasz所指出的,将它们缩短会节省空间/带宽。我认为使用更易于理解的东西更为重要。
雷克斯·摩根

2

直到我们获得SERVER-863为止,建议保持字段名称尽可能短,特别是在您有很多记录的地方。

根据您的用例,字段名称可能会对存储产生巨大影响。不能理解为什么这对于MongoDb来说不是更高的优先级,因为这将对所有用户产生积极影响。如果没有其他问题,我们可以开始对字段名称进行更具描述性的描述,而无需三思而后行地考虑带宽和存储成本。

投票


只是为了更新潜在的未来读者,MongoDB现在确实压缩了,因此长字段名不再是真正的问题。
Hubro
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.