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

时间:2012-03-26 07:41:31

标签: mongodb naming-conventions

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

PageVisitpage_visit

这些符号是否有任何优点/缺点?

4 个答案:

答案 0 :(得分:73)

一般惯例是:

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

示例:

users
pagevisits
users.pagevisits

字段名称约定(应该)遵循一些相同的逻辑,尽管骆驼套管是相当常见的。

答案 1 :(得分:27)

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

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

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

它们在功能上都是相同的,但是第二种类似于输入更麻烦,并且没有标签完成。

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

答案 2 :(得分:16)

http://docs.mongodb.org/manual/reference/limits/中,手册指出集合名称应以下划线(' _')或字母字符开头,并且不能:

  
      
  • 包含$。
  •   
  • 是一个空字符串(例如"")。
  •   
  • 包含空字符。
  •   
  • 从系统开始。字首。 (保留供内部使用。)
  •   

但是,如果您遵循规则并使用' _'创建集合。作为开头的字母,例如" _TWII",当您想要删除集合时,您将遇到麻烦。请参阅下面的测试以及解决方法。收集' _TWII'是在'人员'分贝。

> 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
> 

删除_TWII集合的快捷方式,而人们在'分贝:

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

答案 3 :(得分:0)

MongoDB有一些命名约定。其中之一是数据库名称不区分大小写。另外,如果未指定,则mongo将使集合名称复数。 “课程”将变为“课程”。

由于数据库名称在MongoDB中不区分大小写,因此数据库名称 不能仅因字符大小写而异。

由于这些原因,请尝试使用小写字母命名您的所有集合,并且不要使用特殊字符。您将避免很多错误-特别是如果您使用Mongoose。猫鼬有一些奇怪的查询特性。

例如,如果您有一个名为“ courses”的集合,这是构造模型的方法:

const LawModel = mongoose.model(
  "course",
  new mongoose.Schema({
    id: String,
    name: String,

  }),

请注意“课程”如何单数?猫鼬会将其复数,因此为什么您会看到一个空数组“ []”。 ->您正在查询不存在的集合。

尝试重命名和调整模型。