我想知道是否有数据库收集的约定,例如:
PageVisit
或page_visit
。
这些符号是否有优点/缺点?
Answers:
一般约定为:
例子:
users
pagevisits
users.pagevisits
字段名称约定(应该)遵循某些相同的逻辑,尽管骆驼套非常常见。
只要避免在集合名称中使用连字符即可。
这仅仅是因为,如果您使用以下两个调用的cli,则第一个是无效的JavaScript:
db.foo-bar.find();
db['foo-bar'].find();
它们在功能上是相同的,但是第二个输入起来有点烦人,并且不能制表符完整。
除此之外,优缺点取决于您对收藏的使用。保持一致比选择哪种约定更为重要。
:
有效的命名空间集合名称,如foo:bar
?
db["\n"].insert({});
-没有错误。要考虑的事情大多是您使用的驱动程序带来的便利。
在http://docs.mongodb.org/manual/reference/limits/中,该手册指出集合名称应以下划线(_)或字母字符开头,并且不能:
- 包含$。
- 是一个空字符串(例如“”)。
- 包含空字符。
- 从系统开始。字首。(保留供内部使用。)
但是,如果遵循规则并创建以“ _”作为开头字母的集合(例如“ _TWII”),则在删除该集合时会遇到麻烦。请参阅下面的测试以及修复方法。集合“ _TWII”是在“ people”数据库下创建的。
> 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集合的快捷方式:
> db.createCollection('^TWII')
{ "ok" : 1 }
> db.getCollection('^TWII').drop()
true
MongoDB有一些命名约定。其中之一是数据库名称不区分大小写。另外,如果未指定,mongo将使您的收藏名称复数。“课程”将变为“课程”。
由于数据库名称在MongoDB中不区分大小写,因此数据库名称不能仅因字符的大小写而不同。
因此,请尝试使用小写字母命名您的所有集合,并且不要使用特殊字符。您将避免很多错误-特别是如果您使用Mongoose。猫鼬有一些奇怪的查询特性。
例如,如果您有一个名为“ courses”的集合,则下面是构造模型的方法:
const LawModel = mongoose.model(
"course",
new mongoose.Schema({
id: String,
name: String,
}),
请注意“课程”如何单数?猫鼬会将它复数,因此为什么您会看到一个空数组“ []”。->您正在查询不存在的集合。
尝试重命名和调整模型。