为什么我似乎无法将普通对象合并到 Mongo 文档中?
Why can't I seem to merge a normal Object into a Mongo Document?
我有一个来自第 3 方服务器的数据馈送,我正在将其导入并转换为 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
而"normal"对象没有't。
当我对这两个 运行 _.merge 甚至我自己的递归函数只是将值从后者复制到前者时,updated
对象中的任何内容都与event_obj[0]
,尽管 fresh_event_obj
具有所有新值。
有人知道我做错了什么吗?我觉得这很明显,我只是没有看到它。
问题是,如果您没有在架构中定义属性,并且它们尚不存在,则无法使用
创建它们
doc.prop = value
即使您的架构中有 {strict:false}
。
设置新属性的唯一方法是
doc.set('prop', value)
(如果 属性 在您的架构中不存在,您仍然必须在您的架构中包含 {strict:false}
)
至于在schema中定义的属性太多,你总是可以使用for-in循环遍历对象属性
for(key in fresh_event_obj)
event_obj.set(key, fresh_event_obj[key]);
我有一个来自第 3 方服务器的数据馈送,我正在将其导入并转换为 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
而"normal"对象没有't。
当我对这两个 运行 _.merge 甚至我自己的递归函数只是将值从后者复制到前者时,updated
对象中的任何内容都与event_obj[0]
,尽管 fresh_event_obj
具有所有新值。
有人知道我做错了什么吗?我觉得这很明显,我只是没有看到它。
问题是,如果您没有在架构中定义属性,并且它们尚不存在,则无法使用
创建它们doc.prop = value
即使您的架构中有 {strict:false}
。
设置新属性的唯一方法是
doc.set('prop', value)
(如果 属性 在您的架构中不存在,您仍然必须在您的架构中包含 {strict:false}
)
至于在schema中定义的属性太多,你总是可以使用for-in循环遍历对象属性
for(key in fresh_event_obj)
event_obj.set(key, fresh_event_obj[key]);