添加到嵌入式文档:点或不点

时间:2016-01-07 21:44:38

标签: node.js mongodb

工具:mongodb:2.1.3(Node.js驱动程序)

目的:

我今天要学习的是如何使用本机Node.js驱动程序在Mongodb 中为嵌套对象添加新属性。

问题 - 要点或不点,这就是问题:

到目前为止,在Mongodb术语中,听起来好像我试图" add to an embedded document"。

在上面链接的示例中,用户希望通过添加新的"字段"来更新occurrences(即将{12:3}添加到occurrences

{
  "id" : 1,
  "occurrences" : {
    "1" : 1,
    "2" : 5,
    "17" : 1,
    "35" : 4
  }
}

最流行的答案是做以下事情(我假设" findOneAndUpdate"最近取代了)

db.collection.update(
     {_id:ObjectId("1")},
     { $set: { "occurrences.12": "3" }
}); 

小注 - 为简单起见,我在答案中删除了其他原子更新。

问题:

这种非点解决方案是否可以替代它?或者这样做是错误的,不同的,还是有任何其他潜在的后果?

db.collection.findOneAndUpdate(
     {_id:ObjectId("1")},
     { $set: { "occurrences": {"12:3"}}
});

注意:我使用findOneAndUpdate,因为它似乎是当前的等价物。

1 个答案:

答案 0 :(得分:0)

将其视为使用JavaScript对象:

let occurrences = {1: 2, 3: 4, 5: 6};
// add new property
occurrences[12] = 3;

// clobber object
occurrences = {12: 3};

另请注意that you may not want to embed documents at all,具体取决于您希望如何构建数据。有时你可能想要正常化...但有时候你不会。

请注意,您还可以将updateOne与本机驱动程序一起使用。