【发布时间】:2012-04-09 17:34:15
【问题描述】:
我想知道是否有数据库集合的约定,例如:
PageVisit 或 page_visit。
这些符号有什么优点/缺点吗?
【问题讨论】:
标签: mongodb naming-conventions
我想知道是否有数据库集合的约定,例如:
PageVisit 或 page_visit。
这些符号有什么优点/缺点吗?
【问题讨论】:
标签: mongodb naming-conventions
MongoDB 有一些命名约定。其中之一是数据库名称不区分大小写。此外,如果未指定,mongo 会将您的集合名称复数。 “课程”将变成“课程”。
由于数据库名称在 MongoDB 中不区分大小写,因此数据库名称 不能仅根据字符的大小写不同。
由于它们,请尽量以小写字母命名您的所有收藏,并且不要使用特殊字符。你会避免很多错误——尤其是如果你使用 Mongoose。 Mongoose 有一些奇怪的查询特性。
例如,如果您有一个名为“课程”的集合,那么您需要如何构建模型:
const LawModel = mongoose.model(
"course",
new mongoose.Schema({
id: String,
name: String,
}),
注意“课程”是如何单数的? Mongoose 会将它复数,因此您可能会看到一个空数组“[]”。 --> 你正在查询一个不存在的集合。
尝试重命名和调整您的模型。
【讨论】:
在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
【讨论】:
一般约定是:
例子:
users
pagevisits
users.pagevisits
字段名称约定(应该)遵循一些相同的逻辑,尽管骆驼式外壳相当普遍。
【讨论】:
请避免在集合名称中使用连字符。
那只是因为,如果你使用下面两个调用的cli,第一个是无效的JavaScript:
db.foo-bar.find();
db['foo-bar'].find();
它们在功能上是相同的,但是第二个输入起来有点烦人,并且不能完成制表符。
除此之外,优点/缺点取决于您对集合的使用。保持一致比您选择哪种约定更重要。
【讨论】:
: 是否对命名空间集合名称有效,如foo:bar?
db["\n"].insert({}); - 没有错误。要考虑的主要是您使用的驱动程序的便利性。