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


답변:


90

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

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

예 :

users
pagevisits
users.pagevisits

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


33
특히 MongoDB를 Python과 함께 사용하는 경우 "단어 구분 기호 없음"에 대해 동의하지 않을 것입니다. 공백 대신 밑줄은 가독성이 높기 때문에 코드, 스키마 등에서 가장 바람직한 특성 중 하나입니다.
Noah McIlraith

2
주관성은 아름다운 것입니다.;) 밑줄이 코드 가독성을 향상시키는 너무 많은 단어가 포함 된 필드 또는 컬렉션 이름이있는 경우 이름 전체를 실제로 다시 고려해야합니다. 물론 각자 자신에게. 나는 단어가 분리되는 것에서 가능한 불일치 문제가 훨씬 더 큰 문제임을 발견합니다. 단어 구분자를 사용하지 않는 것은 상대적으로 언어에 구애받지 않습니다. 당신이 밑줄을 선호하는 곳에서 자바 개발자는 아마도 낙타를 선호 할 것이고 그것은 서둘러 지저분해진다.
Remon van Vliet 2013 년

7
복수형이 아닌 단수형이 아닌 경우 Pojos in Plural과 같은 객체에 매핑되고 결국 Users 클래스가됩니다! 오히려 사용자 클래스에 비해
ricardoespsanto

4
@Ricky 그것은 내가 생각합니다. 당신이 언급하고있는 대답은 여기서 혼합 된 동일한 개념을 혼합하는 것입니다. 엔티티 이름 지정과 컬렉션 이름 지정. CUSTOMERS를 SQL 테이블 이름으로 사용할 수 있지만 해당 답변의 작성자가 제안한대로 "Customers"를 엔터티 이름으로 사용하는 사람은 없습니다. 당신이 말했듯이 그것은 매우 주관적인 토론입니다. 전체 코드베이스에서 일관성이있는 한 너무 많은 문제는 없어야합니다.
Remon van Vliet

3
복수형이 함축되어 있기 때문에 단수형이 더 의미가 있다고 생각합니다. @Ricky가 말했듯이이 표준은 오래 전에 SQL에서 확립되었습니다. stackoverflow.com/questions/338156
steampowered

32

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

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

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

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

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


인가 :같이 수집 이름의 네임 유효 foo:bar?
raffian 2012 년

몽고에게는 모든 것이 유효합니다. 예 db["\n"].insert({});-오류가 없습니다. 고려해야 할 사항은 주로 사용중인 드라이버의 편의입니다.
AD7six

1
이것은 Windows의 2.2에서 변경되었습니다 : / \. "* <> : |?는 더 이상 유효하지 않습니다 -docs.mongodb.org/manual/release-notes/2.2/…
toong

5
@toong, 컬렉션이 아닌 데이터베이스 이름입니다.
BorisOkunskiy 2013 년

19

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

0

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

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

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

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

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

  }),

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.