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