[mongodb] MongoDB에 컬렉션 이름을 지정하는 규칙이 있습니까?

다음과 같은 데이터베이스 컬렉션에 대한 규칙이 있는지 알고 싶습니다.

PageVisit 또는 page_visit .

이 표기법의 장점 / 단점이 있습니까?



답변

일반적인 규칙은 다음과 같습니다.

  • 소문자 이름 : MongoDB 컬렉션 이름은 대소 문자를 구분 하므로 대소 문자 구분 문제를 방지 합니다 .
  • 복수형 : 어떤 컬렉션을 복수형 으로 분류하는 것이 더 분명합니다. 예를 들어 “파일”이 아닌 “파일”
  • 단어 구분 기호 없음 : 다른 사람이 (잘못) 단어를 분리하는 문제를 방지합니다 (사용자 이름 <-> user_name, first_name <-> firstname). 이것은 여기 주변의 몇몇 사람들에 따르면 논쟁의 여지가 있지만, 주장이 컬렉션 이름과 분리되어 있다면 그렇게해서는 안된다고 생각하지 않습니다;) 밑줄이나 낙타를 추가하여 컬렉션 이름의 가독성을 높이는 경우 컬렉션 이름이 너무 길거나 컬렉션 분류의 표준 인 마침표를 적절하게 사용해야합니다.
  • 더 높은 세부 컬렉션에 대한 점 표기법 : 컬렉션이 어떻게 관련되어 있는지를 나타냅니다. 예를 들어, 스키마를 설계 한 사람들이 좋은 일을했다면 “users”를 삭제 한 경우 “users.pagevisits”를 삭제할 수 있다고 합리적으로 확신 할 수 있습니다.)

예 :

users
pagevisits
users.pagevisits

필드 이름 규칙은 (반드시) 동일한 논리를 따라야하지만 낙타 케이스는 상당히 일반적입니다.


답변

컬렉션 이름에 하이픈을 사용하지 마십시오.

그 이유는 아래 두 호출의 cli를 사용하는 경우 첫 번째가 잘못된 JavaScript이기 때문입니다.

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

둘 다 기능적으로 동일하지만 두 번째는 입력하기가 약간 더 귀찮고 탭 완성이 아닙니다.

그 외에도 장단점은 컬렉션 사용에 따라 다릅니다. 어떤 규칙을 선택하는 것보다 일관성을 유지하는 것이 더 중요합니다.


답변

에서 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
>

‘people’db에서 _TWII 컬렉션을 삭제하는 바로 가기 :

> db.createCollection('^TWII')
{ "ok" : 1 }
> db.getCollection('^TWII').drop()
true


답변

MongoDB에는 몇 가지 명명 규칙이 있습니다. 그중 하나는 데이터베이스 이름이 대소 문자를 구분하지 않는다는 것입니다 . 또한 mongo는 지정하지 않으면 컬렉션 이름을 복수로 만듭니다. “course”는 “courses”가됩니다.

MongoDB에서는 데이터베이스 이름이 대소 문자를 구분하지 않으므로 데이터베이스 이름은 문자의 대소 문자 만 다를 수 없습니다.

따라서 모든 컬렉션의 이름을 특수 문자없이 소문자로 지정하십시오. 특히 Mongoose를 사용하는 경우 많은 오류를 피할 수 있습니다. 몽구스는 이상한 쿼리 특성을 가지고 있습니다.

예를 들어, “courses”라는 컬렉션이있는 경우 모델을 구성하는 방법은 다음과 같습니다.

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

  }),

“코스”가 어떻게 단수인지 주목하세요? Mongoose는 복수형이므로 빈 배열 “[]”이 표시 될 수 있습니다. -> 존재하지 않는 컬렉션을 쿼리하고 있습니다.

모델 이름을 바꾸고 조정 해보십시오.


답변