Ако ще актуализирате цялата колекция, тогава limit
върху вашия курсор в текущия ви код не е необходимо. Грешката, която получавате, е защото mappingData
поле в products
колекцията няма поле за поддокумент, наречено array
. От вашия пример във въпроса, само title
е налично поле за поддокумент и това е това, което искате.
В зависимост от размера на колекцията от продукти, вмъкването на преобразуваните документи в нова колекция може да повлияе на вашите операции. Можете да избегнете бавната производителност на вмъкване, като използвате новия неподреден API за масово вмъкване който рационализира вашите операции за вмъкване, като ги изпраща групово, и още по-добре, дава ви реална обратна връзка за това какво е успяло и какво е неуспешно.
Следната API операция за групово вмъкване ще вмъкне в newcollection
желаната структура от данни, където се създават новите документи в forEach()
цикъл, използвайки нотация в скоби
за създаване на нови имоти. В груповото вмъкване вие ще изпращате операциите до сървъра на партиди от 1000, което ви осигурява по-добра производителност, тъй като не изпращате всяка заявка до сървъра, а само веднъж на всеки 1000 заявки:
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(); }
С горния пример обратната връзка, която получавате от груповата операция на API, ще бъде в този формат:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Запитване за новата колекция db.newcollection.find()
ще даде:
/* 0 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8d"),
"title" : "Toshiba Satellite Pro 4600 PIII800",
"Manufacturer" : "Toshiba"
}
/* 1 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8e"),
"title" : "Apple Ihone",
"Manufacturer" : undefined
}