为什么我似乎不能将普通对象合并到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]);