mongo의 하위 문서 색인
내가 전화를 걸 때 정확히 무슨 일이 벌어집니다.ensureIndex(data)
일반적인 데이터가 다음과 같을 때data:{name: "A",age:"B", job : "C"}
이 세 개의 필드에 대해 복합 인덱스를 만들 것입니까, 아니면 데이터에서 요청된 항목이나 전혀 다른 항목이 있을 때 하나의 인덱스만 만들 것입니까?
다음 중 하나를 수행할 수 있습니다.
> db.collection.ensureIndex({"data.name": 1,"data.age":1, "data.job" : 1})
> db.collection.ensureIndex({"data": 1})
이 내용은 하위 문서의 인덱스-온-임베디드 필드 및 인덱스에 있는 문서에서 설명합니다.
하위 문서 섹션의 중요한 부분은 '하위 문서에서 동등한 일치를 수행할 때 필드 순서 문제와 하위 문서가 정확히 일치해야 합니다.'입니다.
즉, 단순 쿼리의 경우 두 인덱스가 동일합니다.
그러나 하위 문서의 예에서 볼 수 있듯이, 특정 필드와 반대로 전체 하위 문서를 색인화한 다음 비교 연산자를 수행하면 몇 가지 흥미로운 결과를 얻을 수 있습니다(예:$gte
) - 특정 하위 필드를 색인화하면 유연성은 떨어지지만 잠재적으로 더 유용한 색인을 얻을 수 있습니다.
모든 것은 사용 사례에 따라 다릅니다.
인덱스를 만든 후에는 다음을 사용하여 무엇을 만들었는지 확인할 수 있습니다.
> db.collection.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test.collection",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"data.name" : 1,
"data.age" : 1,
"data.job" : 1
},
"ns" : "test.collection",
"name" : "data.name_1_data.age_1_data.job_1"
}
]
출력에서 알 수 있듯이, 이 키는 다음과 같은 새 키를 생성했습니다.data.name_1_data.age_1_data.job_1
(그_id_
인덱스는 항상 생성됩니다.
새 인덱스를 테스트하려면 다음을 수행합니다.
> db.collection.insert({data:{name: "A",age:"B", job : "C"}})
> db.collection.insert({data:{name: "A1",age:"B", job : "C"}})
> db.collection.find({"data.name" : "A"}).explain()
{
"cursor" : "BtreeCursor data.name_1_data.age_1_data.job_1",
.... more stuff
중요한 것은 새 인덱스가 사용되었음을 알 수 있다는 것입니다(커서 필드의 BtreeCursor data.name _1_data.age_1_data.job_1은 이 경우를 나타냅니다).보시면"cursor" : "BasicCursor"
인덱스가 사용되지 않았습니다.
자세한 내용은 여기를 참조하십시오.
당신은 이것을 시도할 수 있습니다:
db.collection.ensureIndex({"data.name": 1,"data.age":1, "data.job" : 1})
언급URL : https://stackoverflow.com/questions/16769705/subdocument-index-in-mongo
'programing' 카테고리의 다른 글
git 디렉토리의 모든 확장자 파일 무시 (0) | 2023.05.02 |
---|---|
Postgres에서 키워드와 유사한 열 이름 이스케이프 (0) | 2023.05.02 |
날짜 시간 필드별 최신 MongoDB 레코드 가져오기 (0) | 2023.05.02 |
MongoDB에서 $set을 사용하여 중첩된 값/포함된 문서를 업데이트하는 방법은 무엇입니까? (0) | 2023.05.02 |
Dapper를 사용하여 C# List를 데이터베이스에 삽입하는 방법그물 (0) | 2023.05.02 |