Als je de hele collectie gaat updaten, dan is de limit
op uw cursor in uw huidige code is niet nodig. De fout die u krijgt is omdat de mappingData
veld in de products
collectie heeft geen subdocumentveld genaamd array
. Van uw voorbeeld in de vraag, alleen de title
subdocument veld is beschikbaar, en dat is degene die je wilt.
Afhankelijk van de grootte van de productcollectie, kan het invoegen van de geconverteerde documenten in een nieuwe collectie van invloed zijn op uw activiteiten. U kunt trage invoegprestaties voorkomen door de nieuwe ongeordende bulk insert API dat uw invoegbewerkingen stroomlijnt door ze in bulk te verzenden, en nog beter, het geeft u echte feedback over wat is gelukt en wat niet.
De volgende API-bewerking voor bulksgewijs invoegen wordt ingevoegd in newcollection
de gewenste gegevensstructuur waar de nieuwe documenten worden gemaakt binnen de forEach()
loop, met behulp van de haakjesnotatie
om nieuwe eigenschappen te creëren. In de bulkbijlage stuurt u de bewerkingen naar de server in batches van 1000, wat u een betere prestatie geeft omdat u niet elk verzoek naar de server verzendt, maar slechts één keer per 1000 verzoeken:
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(); }
Met het bovenstaande voorbeeld zou de feedback die u krijgt van de bulk-API-bewerking de volgende indeling hebben:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
De nieuwe collectie opvragen db.newcollection.find()
zal opleveren:
/* 0 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8d"),
"title" : "Toshiba Satellite Pro 4600 PIII800",
"Manufacturer" : "Toshiba"
}
/* 1 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8e"),
"title" : "Apple Ihone",
"Manufacturer" : undefined
}