2015-01-02 12 views
2

확장 된 Mongo 데이터베이스의 모든 문서를 업데이트하려고합니다.몽구스 쿼리의 ObjectID 비교

제 계획은 가장 젊고 가장 최근에 작성한 문서로 시작하여 다음으로 가장 오래된 문서를 하나씩 질의하여 다시 작성하는 것입니다.

문제는 내 Mongoose 쿼리가 동일한 초에 만들어진 문서를 건너 뛰는 것입니다. 나는 같은 초에 생성 된 _id에 대해 연산자가보다 크거나 작을 것이라고 생각했습니다. 그러나 데이터베이스에 현재 150 개의 문서가 있지만이 함수는 가장 오래된 문서에서 가장 오래된 문서까지 8 개의 루프만으로 가져옵니다. 당신은 MongoDB의 설명서를 읽어 보면

function loopThroughDatabase(i, doc, sizeOfDatabase){  
    if (i < sizeOfDatabase) {  
     (function(){ 
      myMongooseCollection.model(false) 
       .find() 
       .where("_id") 
       .lt(doc._id) 
       .sort("id") 
       .limit(1) 
       .exec(function(err, docs) { 
        if (err) { 
         console.log(err); 
        } 
        else {      
         updateDocAndSaveToDatabase(docs[0]);  
         loopThroughDatabase(i + 1, docs[0], sizeOfDatabase); //recursion here  
        } 
       });    
     })(); 
    } 
} 

loopThroughDatabase(1, youngestDoc, sizeOfDatabase); 

답변

2

오류가 발생했습니다.

몽구스 쿼리에서 "_id"대신 "id"로 정렬했습니다.

0

, 당신은 무엇을 보장하기 때문에,이 항목이 http://docs.mongodb.org/manual/reference/glossary/#term-objectid를 생성하는 과정에 달려 있다고 볼 수 있습니다 :

다음은 재귀 노드 루프 내 내 몽구스의 쿼리 레코드에 날짜 스탬프를 추가하고 _id 대신 해당 레코드를 사용해야합니다.

+0

감사합니다! 사실 우리는 이미 데이터베이스에 타임 스탬프를 가지고있었습니다. 그러나 타임 스탬프는 MongoDB에서 자동으로 인덱싱되지 않습니다. 그러나 _id는 생성 시간에 따라 자동으로 인덱싱됩니다. –

관련 문제