2017-09-08 13 views
0

Ich versuche, alle Dokumente zu aktualisieren, die den folgenden Kriterien entsprechen.Mehrere Dokumente konnten nicht aktualisiert werden

Aus irgendeinem Grund bekomme ich einen Fehler in der Konsole, dass alerts.save keine Funktion ist.

So habe ich meine Aufzeichnungen aktualisiert.

Ist das Problem, das ich versuche, mehr als ein Dokument zu aktualisieren? Hier

router.route('/mark_as_read/:ownerId') 
.put(function(req, res){ 

    var alerts = new Alerts(); 

    Alerts.find({owner_id: req.params.ownerId}, function(err, alerts){ 
    if(err) 
     res.send(err); 

    alerts.viewed = true; 
    console.log('Alerts: ', alerts); 

    alerts.save(function(err){ 
     if(err) 
     res.send(err); 
     res.json(alerts) 
    }); 
    }); 
}); 

ist ein Beispiel für die Daten zurückgegeben, wenn ich zu tun bekommen:

{ _id: 59aed31e78fbbea611518ddf, 
    message: 'Hammer Hammer at [email protected]', 
    alert_type: 'Share', 
    owner_id: '59a6e66d5ab67150837d96a8', 
    __v: 0, 
    viewed: false, 
    date: 2017-09-05T16:38:54.437Z }, 
    { _id: 59aed6035fee3fa895045693, 
    message: 'Paul Pataa at [email protected]', 
    alert_type: 'Share', 
    owner_id: '59a6e66d5ab67150837d96a8', 
    __v: 0, 
    viewed: false, 
    date: 2017-09-05T16:51:15.193Z }, 
    { _id: 59aedba6fec346aafae9121c, 
    message: 'Marky Mark at [email protected]', 
    alert_type: 'Share', 
    owner_id: '59a6e66d5ab67150837d96a8', 
    __v: 0, 
    viewed: false, 
    date: 2017-09-05T17:15:18.876Z }, 
    { _id: 59aedc36fec346aafae91228, 
    message: 'Lilly Lap at [email protected]', 
    alert_type: 'Share', 
    owner_id: '59a6e66d5ab67150837d96a8', 
    __v: 0, 
    viewed: false, 
    date: 2017-09-05T17:17:42.951Z } 

Ich habe versucht, über die Array-Benachrichtigungen Iterieren, aber dieses dis für mich nicht:

router.route('/mark_as_read/:ownerId') 
.put(function(req, res){ 

    var alerts = new Alerts(); 

    Alerts.find({owner_id: req.params.ownerId}, function(err, alerts){ 
    if(err) 
     res.send(err); 

    for(var i=0; i < alerts.length; i++){ 
     alerts.viewed = true; 
     alerts[i].save(function(err){ 
     if(err) 
      console.log('Error in updating an alert'); 

     }) 
    } 
    }); 
}); 

Antwort

1

Die Suche Methode wird ein Array zurückgeben so alerts.save() wird nicht funktionieren.

Sie müssten über das Array iterieren und save() für jedes Dokument im Array aufrufen.

Alternativ können Sie stattdessen findOne verwenden, wodurch ein einzelnes Dokument zurückgegeben wird.

+0

Danke Steve. Macht Sinn. Ich habe mein Beispiel mit einer Schleife über das Alert-Array aktualisiert, aber das hat nicht funktioniert. Überall kann ich ein klares Beispiel dafür sehen, wie ich damit umgehe? Danke für Ihre Hilfe!! – cnak2

+0

In dieser Zeile ** alerts.viewed = true ** versuchen Sie, auf eine ** viewed ** Eigenschaft des Arrays selbst zu verweisen. Es kann zu Problemen bei der Ausführung kommen, da die ** save ** -Anrufe asynchron sind, die for-Schleife jedoch synchronisiert wird. Daher würde ich empfehlen, ** findOne ** oder ** findById ** zu verwenden, da Sie ohnehin nur ein einzelnes Dokument finden. –

+0

Ich versuche tatsächlich, alle Dokumente zu aktualisieren, die dieselbe owner_id haben. Das Verwenden von findOne oder findById wird in meinem Fall nicht funktionieren. Es muss eine einfache Möglichkeit zum Aktualisieren mehrerer Dokumente geben. Ich habe herausgefunden, wie man es mit der .update-Methode in Mongo macht, aber das funktioniert nicht in meiner Express-App. Haben Sie schon einmal eine Sammlung durchsucht und in jedem zurückgegebenen Dokument ein einzelnes Feld geändert? Das ist meine Herausforderung. Danke noch einmal. Ich bin sicher, die Antwort liegt direkt vor mir. Ich verstehe es noch nicht. :-) – cnak2

Verwandte Themen