2013-11-27 2 views
2

루프를 통해 여러 문서를 삽입하려고하는데 ObjecId의 고유성에 문제가 있습니다. "E110000 중복 키 에러 인덱스 : ... mongoError"생성 및 삽입 된 첫 번째 문서 후에 Mongoskin을 사용하여 MongoDB에 여러 문서 삽입

// Fetch all client documents. 
db.collection('clients').find({}, {cost: 1}).toArray(function(err, dbDocs) { 
    if (err) throw err; 

    // Set up a general doc. 
    var currentTime = new Date(); 
    var doc = { 
    year: currentTime.getFullYear(), 
    quarter: Math.floor(currentTime.getMonth()/3) + 1, 
    paid: false 
    }; 

    // For each client document, insert a document to invoices collection. 
    for (var i = 0, j = dbDocs.length; i < j; i += 1) { 
    doc.quarterCost = (dbDocs[i].cost.monthly * 3); 
    doc.client_id = dbDocs[i]._id; 

    db.collection('invoices').insert(doc, function(err, result) { 
     if (err) throw err; 
     if (result) console.log('Invoice created'); 
    }); 
    } 
}); 

는 내가 얻을 :

나는이 기능을 가지고있다.

질문 : 때문에이 같은 OBJECTID으로 모든 문서를 삽입하려고 루프, 및 생성 오류인가? 어떻게 ObjectId가 매번 무작위인지 확인하기 위해 이것을 다시 작성합니까?

답변

2

첫 번째 삽입시 doc이 새 _id 필드로 수정되었습니다. 즉, 드라이버가 새로운 _id 값을 이미 문서에 추가하지 않으면 루프가 시작될 때 for 루프를 다시 설정해야합니다.

관련 문제