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

yjghlzjz  于 2022-11-03  发布在  Go
关注(0)|答案(5)|浏览(158)

我想知道是否有数据库集合的约定,例如:
PageVisitpage_visit中的一个。
这些表示法有什么优点/缺点吗?

2q5ifsrm

2q5ifsrm1#

The general conventions are:

*Lowercase names: this avoids case sensitivity issues, as MongoDB collection names are case sensitive.
*Plural: more obvious to label a collection of something as the plural, e.g. "files" rather than "file"
*No word separators: Avoids issues where different people (incorrectly) separate words (username <-> user_name, first_name <-> firstname). This one is up for debate according to a few people around here, but provided the argument is isolated to collection names I don't think it should be ;) If you find yourself improving the readability of your collection name by adding underscores or camelCasing your collection name is probably too long or should use periods as appropriate which is the standard for collection categorization.
*Dot notation for higher detail collections: Gives some indication to how collections are related. For example, you can be reasonably sure you could delete "users.pagevisits" if you deleted "users", provided the people that designed the schema did a good job ;)

Examples:

users
pagevisits
users.pagevisits

Field name conventions (should) follow some of the same logic although camel casing those is fairly common.

6pp0gazn

6pp0gazn2#

只是要避免在集合名称中使用连字符。
这仅仅是因为,如果您使用下面两个调用的cli,第一个调用是无效的JavaScript:

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

它们在功能上是相同的,但第二个稍微更麻烦的类型,并没有制表符完成。
除此之外,优点/缺点取决于您对集合的使用。保持一致比您选择哪种约定更重要。

exdqitrt

exdqitrt3#

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

  • 包含$。
  • 为空字符串(例如“”)。
  • 包含空字符。
  • 以system. prefix开始。(保留供内部使用。)

但是,如果您遵循规则并创建一个以“_”作为开头字母的集合,如“_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
64jmpszr

64jmpszr4#

MongoDB有一些命名约定。其中之一是数据库名称不区分大小写。* 此外,如果没有指定,mongo将使用复数形式表示您的集合名称。“course”将变为“courses”。
由于MongoDB中的数据库名称不区分大小写,因此数据库名称不能仅在字符的大小写上存在差异。
因此,请尽量用小写字母命名所有的集合,不要使用特殊字符。这样可以避免很多错误--尤其是使用Mongoose时。Mongoose有一些奇怪的查询特性。
例如,如果您有一个名为“courses”的集合,下面是您需要如何构建模型:

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

  }),

注意“course”是单数的吗?Mongoose会将其复数化,因此您可能会看到一个空数组“[]"。--〉您正在查询一个不存在的集合。
尝试重命名并调整模型。

e5nszbig

e5nszbig5#

没有正式定义的约定,但文档使用单数,即camel大小写。
https://www.mongodb.com/docs/manual/faq/fundamentals/#how-do-i-create-a-database-and-a-collection-
还值得注意的是,如果没有指定集合名称,Mongoose将通过将模型名称复数化来推断集合名称。
https://mongoosejs.com/docs/guide.html#collection

相关问题