2017-12-25 1 views
1

Ich habe eine Sammlung namens Benutzer, die Nachrichten des Benutzers speichert & info. Ich möchte der vorhandenen Sammlung neue Objekte hinzufügen.Wie füge ich ein neues Objekt per ID zur mongoDB Sammlung hinzu?

Ich erhalte einen Fehler ‚Typeerror: user.insert ist keine Funktion‘ - ich denke, ich etwas verpasst ....

Hier wird das Verfahren von der Steuerung:

UserDataController.prototype.sendMsg = function (userID, messages_data, cb) { 

if (userID) { 

    user.findOne({_id: userID},function(err, result){ //Object id=59e5e542a5ba05056c57d847 

     // insert to the collection with the object id 

     user.insert({_id: userID} ,messages_data,function(err, result){ 
      if(err) return cb(err); 
      return cb(null, result); 
     }); 
    }); 

    } 

}; 

Hier wird i das Ergebnis wollen bekommen:

"sentmessages" : [{ 
    "message_body" : "whatsup", // new object 
    "message_subject" : "whatsup", 
    "message_date" : "20/01/2017" 
    }, 
    { 
    "message_body" : "whatsup", // new object 
    "message_subject" : "whatsup", 
    "message_date" : "20/01/2017" 
    }] 

das Schema sieht so aus:

var sentmessages = new schema({ 
    message_date: String, 
    message_subject : String, 
    message_body : String, 

}); 

var UserSchema = new schema({ 
    firstname: String, 
    lastname: String, 
    email: String, 
    sentmessages :[sentmessages] // here is were i want to add new objects 
}); 
+1

Was Push zu nutzen benötigt, wie ich verstanden Sie einen vorhandenen Datensatz aktualisieren möchten (um eine Nachricht an die Benutzer-Liste der gesendeten Nachrichten anhängen), nicht erstellen Neuer Eintrag. In diesem Fall warum verwenden Sie Einfügen statt zu aktualisieren? Ich denke du solltest einen Blick auf http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate werfen –

+0

@TsvetanGanev Danke - ich möchte neue Datensätze hinzufügen ... nicht update ... so fügt jede Einfügung ein new { "message_body": "whatsup", "nachricht_subjekt": "whatsup", "nachricht_datum": "20.01.2017" } objekt – RoyBarOn

+0

Wohin soll dieses Objekt hinzugefügt werden? Wenn Sie es in einer separaten Sammlung hinzufügen, z. "sent_messages", dann fügen Sie wirklich einen Datensatz ein (obwohl ich den Grund dafür nicht sehe, da Sie keine Informationen über den Benutzer speichern, der die Nachricht gesendet hat). Wenn Sie die Nachricht einem vorhandenen Benutzerdatensatz hinzufügen, führen Sie eine Dokumentaktualisierung durch. –

Antwort

0

Verstanden ... $

UserDataController.prototype.sendMsg = function (userID, messages_data, cb) 
{ 

if (userID) { 
    var message_fixesd_data = messages_data.sent_messages[0]; 
     user.update({_id: userID}, 
      { $push: { sent_messages: { 
       message_body : message_fixesd_data.message_body, 
       message_subject: message_fixesd_data.message_subject, 
       message_date : message_fixesd_data.message_date 
      } 
     } 

      }, function (err, result) { 
      if(err) 
      { 
       return cb(err); 
      } 
      else 
      { 

       return cb(true, 'File was save successfully', result); 
      } 
     }); 
    } 

}; 
Verwandte Themen