Pokud se chystáte aktualizovat celou kolekci, pak limit
na vašem kurzoru ve vašem aktuálním kódu není nutné. Chyba, kterou dostáváte, je způsobena mappingData
v products
kolekce nemá pole vnořeného dokumentu s názvem array
. Z vašeho příkladu v otázce pouze title
pole vnořeného dokumentu je k dispozici a to je to, co chcete.
V závislosti na velikosti kolekce produktů může vložení převedených dokumentů do nové kolekce ovlivnit vaše operace. Můžete se vyhnout pomalému výkonu vkládání pomocí nového neuspořádaného rozhraní API pro hromadné vkládání který zjednodušuje vaše operace vkládání tím, že je odesílá hromadně, a ještě lépe vám poskytuje skutečnou zpětnou vazbu o tom, co se povedlo a co selhalo.
Následující operace hromadného vložení API se vloží do newcollection
požadovanou datovou strukturu, kde se nové dokumenty vytvářejí v rámci kurzoru kolekce produktů forEach()
smyčky pomocí závorky
k vytvoření nových vlastností. V hromadném vložení budete na server posílat operace v dávkách po 1000, což vám poskytne lepší výkon, protože na server neposíláte každý požadavek, ale pouze jednou za každých 1000 požadavků:
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(); }
Ve výše uvedeném příkladu bude zpětná vazba, kterou získáte z hromadné operace API, v tomto formátu:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Dotaz na novou kolekci db.newcollection.find()
přinese:
/* 0 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8d"),
"title" : "Toshiba Satellite Pro 4600 PIII800",
"Manufacturer" : "Toshiba"
}
/* 1 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8e"),
"title" : "Apple Ihone",
"Manufacturer" : undefined
}