我想知道是否存在数据库集合的约定,例如:
PageVisit
或page_visit
。
这些符号是否有任何优点/缺点?
答案 0 :(得分:73)
一般惯例是:
示例:
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,
}),
请注意“课程”如何单数?猫鼬会将其复数,因此为什么您会看到一个空数组“ []”。 ->您正在查询不存在的集合。
尝试重命名和调整模型。