Om du ska uppdatera hela samlingen är limit
på markören i din nuvarande kod är inte nödvändigt. Felet du får beror på att mappingData
fältet i products
samlingen har inte ett underdokumentfält som heter array
. Från ditt exempel i frågan, bara title
underdokumentfält är tillgängligt, och det är det du vill ha.
Beroende på storleken på produktsamlingen kan det påverka din verksamhet om du infogar de konverterade dokumenten i en ny samling. Du kan undvika långsam insättningsprestanda med den nya oordnade bulk insert API som effektiviserar dina skäroperationer genom att skicka dem i bulk, och ännu bättre, det ger dig verklig feedback om vad som lyckades och vad som misslyckades.
Följande bulkinsert API-operation kommer att infogas i newcollection
den önskade datastrukturen där de nya dokumenten skapas inom produktinsamlingsmarkörens forEach()
loop, med parentesnotation
att skapa nya fastigheter. I bulkinfogningen kommer du att skicka operationerna till servern i omgångar om 1000, vilket ger dig bättre prestanda eftersom du inte skickar varje begäran till servern, bara en gång av 1000 förfrågningar:
var bulk = db.newcollection.initializeUnorderedBulkOp(),
counter = 0;
db.products.find().forEach(function(doc) {
var document = {};
if (doc.mappingData.title) document["title"] = doc[doc.mappingData.title];
document["Manufacturer"] = doc.Manufacture;
bulk.insert(document);
counter++;
if (counter % 1000 == 0) {
bulk.execute();
bulk = db.newcollection.initializeUnorderedBulkOp();
}
});
if (counter % 1000 != 0) { bulk.execute(); }
Med exemplet ovan skulle feedbacken du får från bulk-API-operationen vara i detta format:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Frågar efter den nya samlingen db.newcollection.find()
kommer att ge:
/* 0 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8d"),
"title" : "Toshiba Satellite Pro 4600 PIII800",
"Manufacturer" : "Toshiba"
}
/* 1 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8e"),
"title" : "Apple Ihone",
"Manufacturer" : undefined
}