2016-09-07 3 views
0

Ich schreibe ein Stück Code, der auf einem npm-Cron-Timer ausgeführt werden soll. Hier ist sie:UpdateMany Keine Funktion MongoDB + Knoten

var CronJob = require('cron').CronJob; 
var job = new CronJob({ 
    cronTime: '* * * * *', 
    onTick: function() { 
    var monk = require('monk'); // persistence module over MongoDB 
    var db = monk('localhost:27017/test'); 

    console.log("Hello from the Cron job! " + new Date()); 
    var collection = db.get('Activity'); 

    collection.updateMany({"repetitions.today": {$gt: 0}}, 
    { 
     $set: { 
      "repetitions.today": 0, 
     } 
    }, function(err, activity){ 
     if (err) throw err; 
    }); 


    }, 
    start: true, 
    timeZone: 'America/Los_Angeles' 
}); 
job.start(); 

Das Problem ist, dass ich einen Fehler auf der Linie collection.updateMany() bekommen. Der Fehler besagt, dass

updateMany keine Funktion ist

Auf der anderen Seite, wenn ich update() statt updateMany() verwenden, funktioniert der Code (aber nur auf den ersten Punkt in Mongo Sammlung, wie erwartet). Was mache ich falsch und was könnte das verursachen?

Ich habe versucht, dies mit foreach() neu zu schreiben, aber es wird auch nicht als eine Funktion erkannt.

+2

versuchen wollen Haben Sie versucht, mit {multi: true} als Option für die Update-Abfrage? collection.update ({ "repetitions.today": {$ gt: 0}}, { $ gesetzt: { "repetitions.today": 0, } }, { multi: true} – dyouberg

+0

Das funktionierte Wissen Sie, ob es dasselbe ist wie updateMany()? Ich bin immer noch neugierig, warum ich das oben beschriebene Problem hatte. – MadPhysicist

+0

Nicht sicher, updateMany() benötigt Version 3.2 oder neuer von MongoDB. Welche Version verwenden Sie? (Mongo --version) – dyouberg

Antwort

1

Hmm ....

Könnte so etwas wie dieses (ES6)

db.collection('Activity').updateMany({"repetitions.today": {$gt: 0}}, 
{ 
    $set: { "repetitions.today": 0 } 
}).then(r => { 
    console.log('Success!'); 
}).catch(err => { 
    console.log('Error - ' + err); 
}); 
Verwandte Themen