2013-10-18 1 views
1

아무 이유없이이 mongoDB 쿼리가 indexOnly가되어서는 안됩니다 : true?아무 이유없이이 mongoDB 쿼리가 indexOnly가되어서는 안됩니다 : true?

나는 어리석은 실수를 저지르기를 바라고 있습니다 .... 내가 뭘 잘못하고 왜 이것이 커버 된 쿼리가되지 않을지 알 수 없습니다.

내가

MongoDB를 2.4.6을 사용하고 여기에 단계를 재현 할 수 있습니다 :

db.Test.insert({"_id" : ObjectId("5261ac33e4b070ca9e1480d1"), "date" : ISODate("2013-10-18T21:46:27.476Z"), "disabled" : false, "userHidden" : false, "postId" : NumberLong(103)}) 

db.Test.ensureIndex({ "postId" : 1, "userHidden" : 1, "disabled" : 1, "date" : -1}, {name: "findByPostId", sparse: true, unique: false}) 

db.Test.find({ $query: {postId: 103, userHidden: false, disabled: false}, $orderby: {date: -1}, $hint: "findByPostId", $explain: 1 }, {postId: 1, userHidden: 1, disabled: 1, date: 1 } ).pretty() 

{ 
    "cursor" : "BtreeCursor findByPostId", 
    "isMultiKey" : false, 
    "n" : 1, 
    "nscannedObjects" : 1, 
    "nscanned" : 1, 
    "nscannedObjectsAllPlans" : 1, 
    "nscannedAllPlans" : 1, 
    "scanAndOrder" : false, 
    "indexOnly" : false, 
    "nYields" : 0, 
    "nChunkSkips" : 0, 
    "millis" : 0, 
    "indexBounds" : { 
      "postId" : [ 
        [ 
          103, 
          103 
        ] 
      ], 
      "userHidden" : [ 
        [ 
          false, 
          false 
        ] 
      ], 
      "disabled" : [ 
        [ 
          false, 
          false 
        ] 
      ], 
      "date" : [ 
        [ 
          { 
            "$maxElement" : 1 
          }, 
          { 
            "$minElement" : 1 
          } 
        ] 
      ] 
    }, 
+0

투사로 0 나는 indexOnly 사실 수 : 0 – Sammaye

답변

0

나는 그것을 알아 냈다. 바라기를 이것은 다른 누군가를 도울 것입니다. 기본적으로 http://docs.mongodb.org/manual/tutorial/create-indexes-to-support-queries/#indexes-covered-queries

는, MongoDB의 쿼리 결과에 _id 필드를 포함 :

문제였다. 따라서 색인에 _id 필드가 포함되어 있지 않으면 쿼리 결과에서 _id 필드 (즉 _id : 0)를 제외해야합니다. _id 추가하여

: 당신이 _id를 통해 _id를 생략 할 네드

> db.Test.find({ $query: {postId: 103, userHidden: false, disabled: false}, $orderby:  {date: -1}, $hint: "findByPostId", $explain: 1 }, {_id: 0, postId: 1, userHidden: 1, disabled: 1, date: 1 } ).pretty() 
{ 
    "cursor" : "BtreeCursor findByPostId", 
    "isMultiKey" : false, 
    "n" : 3, 
    "nscannedObjects" : 0, 
    "nscanned" : 3, 
    "nscannedObjectsAllPlans" : 0, 
    "nscannedAllPlans" : 3, 
    "scanAndOrder" : false, 
    "indexOnly" : true, 
    "nYields" : 0, 
    "nChunkSkips" : 0, 
    "millis" : 0, 
    "indexBounds" : { 
      "postId" : [ 
        [ 
          103, 
          103 
        ] 
      ], 
      "userHidden" : [ 
        [ 
          false, 
          false 
        ] 
      ], 
      "disabled" : [ 
        [ 
          false, 
          false 
        ] 
      ], 
      "date" : [ 
        [ 
          { 
            "$maxElement" : 1 
          }, 
          { 
            "$minElement" : 1 
          } 
        ] 
      ] 
    } 
관련 문제