dan*_*car 70 naming-conventions mongodb
我想知道是否存在数据库集合的约定,例如:
PageVisit或page_visit.
这些符号有任何优点/缺点吗?
Rem*_*iet 74
一般惯例是:
例子:
users
pagevisits
users.pagevisits
Run Code Online (Sandbox Code Playgroud)
字段名称约定(应该)遵循一些相同的逻辑,尽管骆驼套管是相当常见的.
AD7*_*six 29
只是避免在集合名称中使用连字符.
这只是因为,如果你使用下面两个调用的cli,第一个是无效的JavaScript:
db.foo-bar.find();
db['foo-bar'].find();
Run Code Online (Sandbox Code Playgroud)
它们在功能上都是相同的,但第二种类似于输入更麻烦,并且没有标签完成.
除此之外,优点/缺点取决于您对集合的使用.保持一致比您选择的惯例更重要.
Dan*_*eng 16
在http://docs.mongodb.org/manual/reference/limits/中,手册指出集合名称应以下划线('_')或字母字符开头,并且不能:
- 包含$.
- 是一个空字符串(例如"").
- 包含空字符.
- 从系统开始.字首.(保留供内部使用.)
但是,如果您遵循规则并创建一个以"_"作为开头字母的集合,例如"_TWII",则在删除集合时会遇到问题.请参阅下面的测试以及解决方法.集合'_TWII'是在'people'db下创建的.
> 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
>
Run Code Online (Sandbox Code Playgroud)
在'people'db下删除_TWII集合的捷径:
> db.createCollection('^TWII')
{ "ok" : 1 }
> db.getCollection('^TWII').drop()
true
Run Code Online (Sandbox Code Playgroud)
MongoDB 有一些命名约定。其中之一是数据库名称不区分大小写。另外,如果未指定,mongo 会将您的集合名称复数。“课程”将变成“课程”。
由于 MongoDB 中数据库名称不区分大小写,因此数据库名称不能仅通过字符的大小写来区分。
因此,请尝试以小写形式命名您的所有收藏,并且不使用特殊字符。您将避免很多错误 - 特别是如果您使用 Mongoose。Mongoose 有一些奇怪的查询特性。
例如,如果您有一个名为“courses”的集合,则需要按以下方式构建模型:
const LawModel = mongoose.model(
"course",
new mongoose.Schema({
id: String,
name: String,
}),
Run Code Online (Sandbox Code Playgroud)
请注意“course”是单数吗?Mongoose 会将其复数,因此您可能会看到一个空数组“[]”。--> 您正在查询一个不存在的集合。
尝试重命名并调整您的模型。