2017-12-22 8 views
0

Ich habe eine einfache for-Schleife, die nur einen Wert im Schema inkrementiert. Ich rufe einfach findOne mit einem Dokument _id. Aktualisieren Sie die Eigenschaft des Docs und rufen Sie .save. Aber ich bemerkte es nie erhöht, es geht einfach zurück auf 0 und so der Wert geht nie über 1.Mongoose .save wird wieder auf den ursprünglichen Wert zurückgesetzt

Suche/Update-Code

try { 
    for(let i = 0; i < 6; i++) { 
    const find = async() => { 
     const found = await JobStatus.findOne({_id: mongoose.Types.ObjectId(data._id)}) 
     .exec().then(function(doc) { 
      console.log("Before "+i+" : " +doc.number_of_items_processed) 
      doc.number_of_items_processed += 1 
      doc.save(); 
     console.log("After "+i+" : " +doc.number_of_items_processed) 
     }) 
    } 
    find() 
    }//for(....) 
} catch (err) { 
    console.log(err) 
} 

Dies ist die Ausgabe der Konsole:

Before 0 : 0 
After 0 : 1 
Before 2 : 0 
After 2 : 1 
Before 1 : 0 
After 1 : 1 
Before 3 : 0 
After 3 : 1 
Before 5 : 0 
After 5 : 1 
Before 4 : 0 
After 4 : 1 

db.jobstatuses.find().pretty() 
{ 
     "_id" : ObjectId("5a3c981cbd8f4128c48d8207"), 
     "number_of_items_submitted" : 5059, 
     "number_of_items_processed" : 1,//STARTS OUT WITH 0 
     "time_completed" : null, 
     "job_outcome" : "Submitted", 
     "job_errors" : null, 
     "time_submitted" : ISODate("2017-12-22T05:29:00.530Z"), 
     "__v" : 0 
} 

Antwort

1

// Versuchen Sie, diese

try { 
    for(let i = 0; i < 6; i++) { 
    const find = async() => { 
     const found = await JobStatus.update({_id: mongoose.Types.ObjectId(data._id)},{$inc:{number_of_items_processed:1}}) 
     .exec().then(function(doc) { 
      console.log("Number of items processed"+ doc.number_of_items_processed); 
     }) 
    } 
    find() 
    }//for(....) 
} catch (err) { 
    console.log(err) 
} 

// In Ihrem Ansatz

try{ 
    for(let i = 0; i < 6; i++) { 
    const find = async() => { 
    const found = await JobStatus.findOne({_id: mongoose.Types.ObjectId(data._id)}).exec();  
     console.log("Before "+i+" : " +found.number_of_items_processed) 
     found.number_of_items_processed += 1 
     found.save(); 
     console.log("After "+i+" : " +found.number_of_items_processed) 
    } 
    find() 
    }//for(....) 
    } catch (err) { 
    console.log(err) 

}

+0

Danke. Diese Arbeit, aber ich frage mich nur, was ist los mit meinem Ansatz. –

+0

Async-Problem haben in Ihrem Ansatz –

+0

Entschuldigung, ich bin beschäftigt .. ich werde meinen Code korrigieren und finden, was Problem in Ihrem Ansatz ist. –

Verwandte Themen