다음과 같은 데이터베이스 컬렉션에 대한 규칙이 있는지 알고 싶습니다.
PageVisit
또는 page_visit
.
이 표기법의 장점 / 단점이 있습니까?
답변:
일반적인 규칙은 다음과 같습니다.
예 :
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'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는 복수형이므로 빈 배열 "[]"이 표시 될 수 있습니다. -> 존재하지 않는 컬렉션을 쿼리하고 있습니다.
모델 이름을 바꾸고 조정 해보십시오.