0
I have a problem that I have not found solution yet, I have a select in a Precedent, I do a foreach in the result, inside this foreach I do another select in another Precedent using the Ids as code below.
The problem is that when it comes to making Bulk in Mongo db for some reason Function done() is calling Bulk more than once, at some point the done() is being called more than once.
var consultaSQL = function(){
console.time('sql');
sequelize.query('PRS_MONGO_PRODUTO;', { type: sequelize.QueryTypes.SELECT }).then(function(result){
console.log(result.length);
console.timeEnd('sql');
done = _.after(result.length, function () {
if(result.length > 0) {
var i = 1;
var bulk = Detalhe.collection.initializeOrderedBulkOp();
console.time('bulk');
result.forEach(function(p){
bulk.find({ produtoId: p.produtoId, clienteId: p.clienteId }).upsert().replaceOne(p);
});
console.timeEnd('bulk');
console.log('Quantidade Exec: ' + result.length);
console.time('exec');
bulk.execute(function (err, result) {
if(err) console.error(err);
console.timeEnd('exec');
console.log('##################### Inicia em 5 Segundos! #####################');
var teste = setTimeout(function () {
consultaSQL();
}, 5000);
});
}
else {
console.log('##################### Sem registros! #####################');
setTimeout(function () {
consultaSQL();
}, 30000);
}
});
if(result.length == 0) done();
result.forEach(function(p){
p.skus = [];
sequelize.query('PRS_PESQ_PRODUTO_INDEXACAO_MONGO ' + p.clienteId + ', ' + p.produtoId, { type: sequelize.QueryTypes.SELECT }).then(function(resultA){
done2 = _.after(resultA.length, function () {
done();
});
if(resultA.length == 0) done2();
resultA.forEach(function(s){
sequelize.query('select caminho as imagem from produtoSkuImagem where produtoSkuId = ' + s.produtoSkuId, { type: sequelize.QueryTypes.SELECT }).then(function(resultB){
done3 = _.after(resultB.length, function () {
done2();
});
s.imagens = [];
s.imagens.push(resultB)
p.skus.push(s);
done3();
});
});
});
});
}).catch(function(err){
console.error(err);
process.exit();
});
}
The result he has to generate is this below:
{
"_id" : ObjectId("573b202f6d16e35c707c3119"),
"clienteId" : 1,
"produtoId" : 3948,
"parceiroId" : 1,
"codigoProduto" : "2014526",
"nome" : "Armário Blumenau Branco - Politorno",
"descricao" : "Armário para Forno Microondas, com duas portas.Fabricado em chapas de 15mm. Limpeza do móvel deve ser feita com um pano umedecido com água.",
"codigoMarca" : 3150,
"marca" : "Politorno",
"produtoSkuId" : 4424,
"peso" : 23250,
"altura" : 11,
"comprimento" : 109,
"estoque" : 1,
"preco" : 185.31,
"precoDe" : 285,
"pontos" : 195,
"parcelamento" : 1,
"imagem" : "https://static.wmobjects.com.br/imgres/arquivos/ids/2509026",
"ativo" : 1,
"dataCadastro" : ISODate("2016-03-21T11:10:53.620Z"),
"dataAtualizacao" : ISODate("2016-05-17T10:29:27.590Z"),
"skus" : [
{
"clienteId" : 1,
"produtoId" : 3948,
"parceiroId" : 1,
"codigoProduto" : "2014526",
"nome" : "Armário Blumenau Branco - Politorno",
"descricao" : "Armário para Forno Microondas, com duas portas.Fabricado em chapas de 15mm. Limpeza do móvel deve ser feita com um pano umedecido com água.",
"codigoMarca" : 3150,
"marca" : "Politorno",
"produtoSkuId" : 4424,
"peso" : 23250,
"altura" : 11,
"comprimento" : 109,
"estoque" : 1,
"preco" : 185.31,
"precoDe" : 285,
"pontos" : 195,
"parcelamento" : 1,
"imagem" : "https://static.wmobjects.com.br/imgres/arquivos/ids/2509026",
"ativo" : 1,
"dataCadastro" : ISODate("2016-03-21T11:10:53.620Z"),
"dataAtualizacao" : ISODate("2016-05-17T10:29:27.590Z"),
"imagens" : [
[
{
"imagem" : "https://static.wmobjects.com.br/imgres/arquivos/ids/2514797"
},
{
"imagem" : "https://static.wmobjects.com.br/imgres/arquivos/ids/2514804"
},
{
"imagem" : "https://static.wmobjects.com.br/imgres/arquivos/ids/2514811"
}
]
]
}
]
}
This code works the problem is that it calls Bulk more than once so it enters more than once, so the result is time consuming. I need the done() to be called only once and in the right way.
Thank you very much, it worked perfectly, now I will implement some more fields I have and already was. TKS!
– Daniel Metta