2015-06-01 2 views
1

У меня есть фид данных с стороннего сервера, который я втягиваю и конвертирую в JSON. В фиде данных никогда не будет сгенерировано автоматически сгенерированное мной _id s mongoDB, но есть уникальный идентификатор, называемый vehicle_id.Почему я не могу объединить обычный объект в Mongo Document?

Функция, приведенная ниже, заключается в том, что обработка данных с помощью объекта json и копирование его значений в документ mongo, если есть документ mongo с тем же vehicle_id.

function update_vehicle(fresh_event_obj) { 
    console.log("Updating Vehicle " + fresh_event_obj.vehicleID + "..."); 

    Vehicle.find({ vehicleID: fresh_event_obj.vehicleID }, function (err, event_obj) { 
     if (err) { 
     handle_error(err); 
     } else { 
     var updated = _.merge(event_obj[0], fresh_event_obj); 

     updated.save(function (err) { 
      if (err) { 
      handle_error(err) 
      } else { 
      console.log("Vehicle Updated"); 
      } 
     }); 

     } 
    }); 
    } 

Структуры event_obj[0] и fresh_event_obj идентичны, за исключением того, что event_obj[0] имеет _id и __v в то время как «нормальный» объект не делает.

Когда я бегу _.merge на этих двух, или даже свою собственную рекурсивную функцию, которая просто копирует значения от последнего к первому, ничто в updated объект не отличается от event_obj[0], несмотря на fresh_event_obj имеющие все новые значения.

Кто-нибудь знает, что я делаю неправильно? Я чувствую, что это очевидно, и я просто не вижу его.

+0

ли ваша схема имеет записи для любых свойств 'fresh_event_obj' это сделает g для вставки? – laggingreflex

+0

Вы, кажется, используете loadash, и в этом случае [проверьте этот вопрос] (http://stackoverflow.com/questions/25448343/lodash-merge-with-mongoose). Попробуйте изменить '_.merge' на' _.extend' – laggingreflex

+0

@laggingreflex Я пробовал ._extend безрезультатно. У меня такая же проблема. Ничего не меняется в «обновленном» объекте. У моей схемы еще нет записей, в настоящее время для 'strict' установлено значение false. Однако, даже если это проблема, моя проблема в том, что '_.merge' или даже рекурсивно просто установление значений объекта, равных друг другу, похоже, не работает. Я делаю 'JSON.stringify' из 3 задействованных объектов и показывает, что проблема существует до того, как я даже доберусь до' .save', объекты просто не объединяют их значения. – BumbleShrimp

ответ

1

Проблема заключается в том, что если вы не имеете свойства, определенные в схеме, и если они не существуют, вы не можете создавать их с

doc.prop = value 

даже если у вас есть в вашем {strict:false} схемы.

Единственный способ установить новые свойства, чтобы сделать

doc.set('prop', value) 

(Вы все еще должны иметь {strict:false} в вашей схеме, если это свойство не существует в вашей схеме)

Как за то, что слишком многие свойства должны быть определены в схеме, вы всегда можете использовать для в цикле, чтобы пройти через свойство объекта

for(key in fresh_event_obj) 
    event_obj.set(key, fresh_event_obj[key]); 
+0

Это сработало для меня, извините за медленный ответ. Спасибо, что помогли мне. – BumbleShrimp

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