为什么我似乎不能将普通对象合并到Mongo文档中?

我有一个来自第三方服务器的数据馈送,我正在将其转换为JSON。 数据馈送将永远不会有我的mongoDB的自动生成的_id s,但有一个唯一的标识符vehicle_id

下面的函数是处理如果存在具有相同vehicle_id的mongo文档,那么处理数据馈送生成的json对象fresh_event_obj并将其值复制到mongo文档中。

 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这两个,甚至我自己的recursion函数,只是将值从后者复制到前者,尽pipefresh_event_obj具有所有新值,但updated对象中没有任何内容与event_obj[0]不同。

有没有人有任何想法我做错了? 我觉得这是显而易见的,我只是没有看到它。

问题是,如果您的架构中没有定义属性,并且如果它们不存在,则无法使用它们来创build它们

 doc.prop = value 

即使在架构中有{strict:false}也是如此。

设置新属性的唯一方法就是做

 doc.set('prop', value) 

(如果该模式中不存在该属性,那么您的架构中仍然必须有{strict:false}

至于要在模式中定义的属性过多,可以使用for-in循环来遍历对象属性

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