2016-08-02 18 views
0

Ich habe ein Problem beim Einfügen eines neuen JSON-Objekts in ein Array von JSON-Objekten in MongoDB von meinem Angular Controller.Hinzufügen zu Dokumentarray in Mongo von Angular Controller

Ein einfaches Konzept das, was ich für dieses Schema zu tun versuche, ist:

var ThingSchema = new mongoose.Schema({ 
    id: Number, 
    items: [{ 
     item_id: Number, 
     item_name: String, 
     item_price: Number 
    }] 
}); 

Und es meinen mongodb in einen der Mongo-Konsole hinzufügen kann ich verwenden:

db.things.update( 
{ "_id": ObjectId("579b7860b168c80c1fe8a32a")}, 
{ $push: { 
    "items": { 
     "item_id" : 134, 
     "item_name" : "sampleItem", 
     "item_price" : 234.00 
    }} 
}) 

jedoch Ich bin mir nicht sicher, wie ich das auf eine http Anfrage von AngularJS übersetzen kann. Ich habe Yeoman benutzt, um meine App zu rüsten und bin jetzt mehr daran interessiert, einen funktionsfähigen Prototyp zu bekommen. In meinen Angular-Controller, verwende ich diese Funktion

addNewItem(thing, newItem) { 
    this.$http.put('/api/things/' + thing._id, { 'items': newItem}) 
     // on success clear the fields 
    .then(response => { 
     console.log(response); 
     alert(this.newItem); 
     thing.items.push(newItem); 
     newItem = {}; 
    }); 
} 

Wenn ich diese Funktion aufrufen ich es meinen Array hinzufügen, dass ich instanziiert haben, aber ich kann die tatsächliche MongoDB selbst nicht zugreifen, obwohl ein 200-Antwortcode zurückgegeben wird.

Und in meiner HTML-Datei habe ich

<form novalidate class="condition-form"> 
    <fieldset> 
     <input type="number" ng-model="newItem.item_id" name="" placeholder="Enter item id"> 
     <input type="text" ng-model="newItem.item_name" name="" placeholder="Enter item name"> 
     <input type="number" ng-model="newItem.item_price" name="" placeholder="Enter item price"> 
     <input type="submit" ng-click="$ctrl.addNewItem(thing, newItem)" value="Add"> 
    </fieldset> 
</form> 

Ich bin wirklich ratlos, wie ich diesen mongodb Aufruf an meine MEAN Stack Anwendung übersetzen. Wenn es hilft, verwende ich Babel mit EMCAScript 6. Jede Hilfe bedeutet viel!

Dank

Antwort

0

Am Backend davon, wenn die Steuerung die Dinge Funktion in API erreicht dort werden Sie einen mongoDB-Treiber (wie MongoDB, Mongoose) für die Interaktion mit Mongo Shell verwenden. Die Funktion speichern, wenn Sie Mungo verwenden, werden wie folgt aussehen:

Things.update({'id':req.params.thing._id},{ $push : {items : req.body.items }},function (err,updated) { 
if(err){ 
    console.log(err); 
} else { 
    output = {'msg':'Updated Successfully'}; 
} 

Rückkehr res.json (Ausgang); });