2013-09-08 2 views
0

다음 한 작동하지 않습니다 몽구스 compund 고유 인덱스 나 인덱스

PaymentSchema.index({ driver_id: 1, year: 1, month: 1 },{ unique: true }); 

그래서 나는이 컬렉션은 필드 driver_id, year and month의 각기 다른 조합에 대해 하나의 기록을 유지하고 싶다. 나는 upsert 옵션 모음을 업데이트 할 :

var query = { 
     driver_id: req.params.driver_id, 
     year: req.params.year, 
     month: req.params.month, 
     amount: req.params.old_value 
    }; 

    var update = { 
     $set: { 
      amount: req.params.new_value 
     } 
    }; 

    var options = { 
     upsert: true 
    }; 

    Payment.update(query,update,options,function(err,rows){ 
     if(err) return next(err); 
     res.json({}); 
    }); 

그래서 내가 원하는 것은 주어진 고유 키 (driver_id + 년 + 월) 및 추가 조건 amount = ...와와 문서를 업데이트하는 것입니다. 쿼리 조건이 양호하면 문서를 업데이트해야하며 작동합니다. 이 조건에 따라 문서가 발견되지 않고 고유 색인이있는 문서가 존재하지 않으면 해당 문서가 작성됩니다. 그러나 고유 색인이있는 문서가있는 경우 (금액 조건 만 올바르지 않은 경우) 동일한 고유 색인 (driver_id + year + month)으로 작성된 새 문서. 그 3 개의 필드 (driver_id + year + month)에 고유 인덱스를 선언했기 때문에 그것은 이상합니다. mongoshell에서 같은 필드가있는 두 개의 문서가 있다는 것을 알 수 있습니다 ...

+0

'getIndexes'의 질문에 출력을 추가 할 수 있습니까? http://docs.mongodb.org/manual/reference/method/db.collection.getIndexes/ – WiredPrairie

답변

0

해결 : mongod을 다시 시작해야했습니다. 데이터베이스를 삭제하십시오 (아마 reindex 옵션도 작동합니다).