嵌入/嵌入MongoDB中的嵌套文档

时间:2014-11-24 16:06:45

标签: javascript mongodb meteor

我试图在类似于

的结构中嵌套嵌套文档(活动)
{
  "_id" : "123",
  "modules" : {
    "x" : {
    },
    "y" : {
      "activities" : {
        "preview": {
          "createdAt": "2014-10-13 15:21:22.113",
          "data": {}
        }
      }
    },
    "z" : {
      "activities" : {
        "render": {
          "createdAt": "2014-10-15 04:22:25.171",
          "data": {}
        },
        "render": {
          "createdAt": "2014-10-14 02:42:24.132",
          "data": {}
        }
      }
    }
  }
}

然后我尝试

selector = { "_id": id, "modules": module, "activities" }
activity = { "preview": { "data": data }}
Meteor.users.upsert(selector, { $set: activity, $setOnInsert: { "createdAt: new Date()" }})

哪个收益

MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: meteor.users.$_id_  dup key: { : "123" }

_id是唯一的索引键。每个用户的_id'级别以及每个模块的activities'级别上都有其他字段/文档,但没有关于upsert的字段/文档。每个模块都是独特的。插入第一条记录之前,活动文档不存在。

有了这个,我希望有人能够理解我想要完成的事情并帮助我朝着正确的方向前进。

1 个答案:

答案 0 :(得分:1)

Upsert用于插入或更新(如果存在)新文档。它不适用于子文档。

您应该只更新您的文档:

selector = { "_id": id, "modules": module, preview : null }
activity = { "preview": { "data": data , "createdAt" : new Date() }}
Meteor.users.update(selector, { $set: 'activity' : activity }})