在MongoDB中有名称集合的约定吗?

Is there a convention to name collection in MongoDB?

我想知道是否存在数据库集合的约定,例如:

PageVisitpage_visit

这些符号有什么优点/缺点吗?


一般惯例是:

  • 小写名称:这避免了区分大小写的问题,因为MongoDB集合名称区分大小写。
  • 复数:更明显的是将某个集合标记为复数,例如"文件"而不是"文件"。
  • 无单词分隔符:避免不同的人(错误地)使用不同的单词(用户名<->用户名,名<->名)分隔的问题。根据这里的一些人,这一个有待讨论,但前提是这个论点与集合名称是孤立的,我认为它不应该是;)如果你发现你自己通过添加下划线或用camelscasing来提高集合名称的可读性,你的集合名称可能太长,或者应该使用适当的句点,也就是集合分类的标准。
  • 更高细节集合的点表示法:给出了集合如何相关的一些指示。例如,如果删除了"users",则可以合理地确定可以删除"users.pagevisits",前提是设计架构的人员做得很好;)

示例:

1
2
3
users
pagevisits
users.pagevisits

字段名约定(应该)遵循一些相同的逻辑,尽管camel大小写这些是相当常见的。


只需避免在集合名称中使用连字符。

这仅仅是因为,如果使用下面两个调用的cli,第一个调用是无效的javascript:

1
2
db.foo-bar.find();
db['foo-bar'].find();

它们在功能上都是相同的,但是第二个对输入来说稍微有点烦人,而且标签不完整。

除此之外,优势/劣势取决于您对集合的使用。保持一致比你选择的惯例更重要。


在http://docs.mongodb.org/manual/reference/limits/中,手册规定集合名称应以下划线("uu")或字母字符开头,并且不能:

  • contain the $.
  • be an empty string (e.g."").
  • contain the null character.
  • begin with the system. prefix. (Reserved for internal use.)

但是,如果您遵循规则并创建一个以"uu"作为开头字母的集合,例如"twii",则当您想要删除集合时会遇到问题。请参阅下面的测试和修复方法。集合"twii"是在"people"db下创建的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
> show collections
_TWII
employees
system.indexes
> db._TWII.drop()
2015-02-19T16:34:56.738-0800 TypeError: Cannot call method 'drop' of undefined

> use admin
switched to db admin

> db.runCommand({renameCollection:"people._TWII",to:"people.TWII"})
{"ok" : 1 }
> use people
switched to db people
> show collections
TWII
employees
system.indexes
> db.TWII.drop()
true
> show collections
employees
system.indexes
>

"People"数据库下删除"Twii"集合的快捷方式:

1
2
3
4
> db.createCollection('^TWII')
{"ok" : 1 }
> db.getCollection('^TWII').drop()
true