programing

mongo의 하위 문서 색인

skycolor 2023. 5. 2. 22:32
반응형

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

반응형