我有来自第三方服务器的数据Feed,我正在拉入并转换为JSON。数据源永远不会包含我的mongoDB自动生成的_id
,但是有一个名为vehicle_id
的唯一标识符。
下面的函数是处理数据馈送生成的json对象fresh_event_obj
并将其值复制到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 :(得分:1)
问题是,如果您没有在架构中定义属性,并且它们尚不存在,则无法使用
创建它们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]);