Dies sollte einfach sein, aber es ist überraschend schwierig und extrem frustrierend. Ich versuche, ein "Object" -Feld in mongodb mit einem neuen Objekt zu überschreiben, das der Benutzer auf meiner Client-Webseite erstellt. Ich habe bestätigt, dass alle anderen Felder, die ich an die Update-Operation übergebe, tatsächlich aktualisiert werden, mit Ausnahme des Javascript-Objekts. Statt es mit dem Objekt zu aktualisieren Ich bin vorbei (Während ich validiert mit dem Objekt aufgefüllt wird, ich die durch bin), aktualisiert sie es einfach zurück zu {} anstelle von, was übergeben wird:Objekt in Mongodb überschreiben
{ nodes:[ { w: 120, h: 80,type: 'InHive',left: 184,top: 90,text: 'item',query: 'hey',name: 'sample',id: '7686132d-6fcf-4a3b-baa2-b1c628e0b2d6' } ], edges: [], ports: [],groups: [] }
Wenn ich versuche, Um das Datenfeld außerhalb der Meteor-Methode direkt von der Mongo-Konsole zu aktualisieren, überschreibt es dieses Feld erfolgreich mit dem Javascript-Objekt. Was mache ich hier falsch, weil ich für das Leben von mir das nicht herausfinden kann?
Server Methode
'updateOneWorkflow': function(id, field, object) {
this.unblock;
if (Meteor.userId()) {
var _username = Meteor.user().username;
MYCOLLECTION.update({
_id: id
}, {
$set: {
[field]: object, //this just gets reset back to {} whenever this update method is called
"metadata.last_modified_dt": new Date(), //this gets updated
"metadata.modified_by": Meteor.userId(), //this gets updated
'metadata.modified_by_username': _username //This gets updated
}
});
} else {
throw new Meteor.Error(403, "You are not authorized to perform this function");
}
}
Client-Call:
var _jsonformat = toolkit.exportData();
var currentid = Session.get('rulesRowClicked')._id;
console.log(_jsonformat);
Meteor.call('updateOneWorkflow' , currentid, 'data', _jsonformat, function(err, res){
if(err){
toastr.error('Failed to save result ' + err);
}
else{
toastr.success('Saved workflow');
}
});
Was sind die Werte/Typen von 'Feld' und 'Objekt' vor der Update-Anweisung? Können Sie uns zeigen, was Sie bekommen, wenn Sie console.log (field)/console.log (object) ausführen? –
Wenn Sie sich den Client-Code ansehen, wird angezeigt, was an die obige Methode übergeben wird. Feld ist 'Daten' und das Konsolenprotokoll auf dem Server und dem Client zeigen das JSON-Objekt, das zusammen mit dem Feldwert aufgefüllt wird. – user2100493
Probieren Sie 'console.log' das' object' var innerhalb Ihrer Methode in Server – Khang