source

색인화된 하위 문서 필드에서 MongoDB "시작" 쿼리를 수행할 수 있습니까?

manycodes 2023. 2. 14. 21:34
반응형

색인화된 하위 문서 필드에서 MongoDB "시작" 쿼리를 수행할 수 있습니까?

필드가 값으로 시작하는 문서를 찾고 있습니다.

테이블 스캔은 notablescan을 사용하여 비활성화됩니다.

이 방법은 다음과 같습니다.

db.articles.find({"url" : { $regex : /^http/ }})

이것은, 이하에 해당하지 않습니다.

db.articles.find({"source.homeUrl" : { $regex : /^http/ }})

다음과 같은 에러가 표시됩니다.

error: { "$err" : "table scans not allowed:moreover.articles", "code" : 10111 }

둘 다 색인이 있습니다.url그리고.source.homeUrl:

{
    "v" : 1,
    "key" : {
        "url" : 1
    },
    "ns" : "mydb.articles",
    "name" : "url_1"
}

{
    "v" : 1,
    "key" : {
        "source.homeUrl" : 1
    },
    "ns" : "mydb.articles",
    "name" : "source.homeUrl_1",
    "background" : true
}

하위 문서 색인에 대한 regex 쿼리에 제한이 있습니까?

테이블 스캔을 디세블로 하면 쿼리 옵티마이저에서 테이블스캔이 "wins"되는 쿼리는 실행되지 않습니다.아직 글을 올리지 않았지만, 오류를 근거로 볼 때 여기서 일어나고 있는 일이라고 추측하는 것이 타당합니다.인덱스를 명시적으로 암시해 보십시오.

db.articles.find({"source.homeUrl" : { $regex : /^http/ }}).hint({"source.homeUrl" : 1})

그러면 테이블 스캔이 가능한 선택사항으로 삭제되고 쿼리가 정상적으로 반환됩니다.

언급URL : https://stackoverflow.com/questions/26631352/can-i-do-a-mongodb-starts-with-query-on-an-indexed-subdocument-field

반응형