2017-01-25 7 views
1

Это должно быть просто, но это удивительно сложно и крайне сложно. Я пытаюсь перезаписать поле «Объект» в mongodb с новым объектом, который пользователь создает на моей клиентской веб-странице. Я подтвердил, что все другие поля, которые я передаю в операцию обновления, фактически обновляются, за исключением объекта javascript. Вместо того, чтобы это обновление с объектом я передаю (Пока я подтверждено заселяется с объектом я передаю через), он просто обновляет его обратно {} вместо Whats передается:Переписать объект в mongodb

{ 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: [] } 

Когда я пытаю для обновления поля данных вне метеорного метода, непосредственно из интерфейса консоли mongo, он успешно перезаписывает это поле с помощью объекта javascript. Что я делаю неправильно здесь, потому что я не могу, чтобы жизнь меня показала это?

Метод Сервера

'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 Вызов:

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'); 
      } 
     }); 
+0

Каковы значения/типы «поля» и «объект» перед операцией обновления? можете ли вы показать нам, что вы получите, если вы запустите console.log (field)/console.log (object)? –

+0

Если вы посмотрите на код клиента, он показывает, что передается методу выше. Поле - это «данные», а консольный журнал как на сервере, так и на клиенте показывает, что объект JSON заполняется вместе с значением поля. – user2100493

+0

Попробуйте 'console.log'' object' var внутри вашего метода на сервере – Khang

ответ

0

Вопрос был сумасшедшим, чем я ожидал. Если вы используете Meteorjs, и вы используете фреймворк Aldeed Schema 2, он, похоже, полностью игнорирует обновления/вставки объектов json, даже если вы задаете тип поля Object, если вы не настроите ту же схему, что и объект (включая вложенные объекты массива) и присоединить его к вашей коллекции. Самая тупая вещь, которую я когда-либо видел, не знаю, почему ничего не предупреждает об этом. Я удалил приложение схемы, и он сработал.

0

Я считаю, что ваша проблема, вытекающая из этой линии: [field]: object. Я не считаю, что это правильный метод динамического доступа к полю объекта. Вместо этого попробуйте динамически обновить поле следующим образом:

'updateOneWorkflow': function(id, field, object) { 
    this.unblock; 
    if (Meteor.userId()) { 
     var _username = Meteor.user().username; 
     var newObj = { 
      "metadata": { 
       "last_modified_dt": new Date(), 
       "modified_by": Meteor.userId(), 
       "modified_by_username": _username 
      } 
     }; 
     newObj[field] = object; 
     MYCOLLECTION.update({ 
      _id: id 
     }, { 
      $set: newObj 
     }); 
    } else { 
     throw new Meteor.Error(403, "You are not authorized to perform this function"); 
    } 
} 
+0

к сожалению, похоже, только обновление 3 столбцов метаданных, но не фактический объект данных с объектом, переданным функции. По-прежнему отображается как {} – user2100493

+0

@ user2100493 вы можете консольно управлять сервером, чтобы быть уверенным, что он добрался до сервера? – Adam

+0

уверен, здесь есть выход: { \t метаданных: { \t \t last_modified_dt: "Ср 25 января 2017 19: 33: 01 GMT - 0500 (EST)", \t \t MODIFIED_BY: 't4hcAugBkr2ax6E3G', \t \t modified_by_username : 'ngaadmin' \t}, \t данных: { \t \t узлы: [ \t \t \t [Объект] \t \t], \t \t края: [], \t \t порты: [], \t \t группы: [] \t}} – user2100493

Смежные вопросы