Se você for atualizar toda a coleção, o
limit
no seu cursor no seu código atual não é necessário. O erro que você está recebendo é porque o mappingData
campo em products
coleção não tem um campo de subdocumento chamado array
. Do seu exemplo na pergunta, apenas o title
campo de subdocumento está disponível, e esse é o que você deseja. Dependendo do tamanho da coleção de produtos, inserir os documentos convertidos em uma nova coleção pode afetar suas operações. Você pode evitar um desempenho de inserção lento usando o novo API de inserção em massa que agiliza suas operações de inserção enviando-as em massa e, melhor ainda, fornece feedback real sobre o que foi bem-sucedido e o que falhou.
A seguinte operação da API de inserção em massa será inserida em
newcollection
a estrutura de dados desejada onde os novos documentos são criados dentro do cursor de coleção de produtos forEach()
loop, usando a notação de colchetes
para criar novas propriedades. Na inserção em massa, você enviará as operações para o servidor em lotes de 1.000, o que oferece um desempenho melhor, pois você não está enviando todas as solicitações ao servidor, apenas uma vez a cada 1.000 solicitações: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(); }
Com o exemplo acima, o feedback que você recebe da operação da API em massa estaria neste formato:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
Consultando a nova coleção
db.newcollection.find()
vai render:/* 0 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8d"),
"title" : "Toshiba Satellite Pro 4600 PIII800",
"Manufacturer" : "Toshiba"
}
/* 1 */
{
"_id" : ObjectId("56558b0427adb60c9f7e6f8e"),
"title" : "Apple Ihone",
"Manufacturer" : undefined
}