0
{
name: “Bimal”,
role: “developer”,
reports_to: “girish”,
technology:[{
  name: “PHP”,
  rating: 5
},{
  name: “JavaScript”,
  rating: 4    
}],
project: [{
    project_name: “TGT”,
    client_name: “Said”,
    estimated_time: 20,
    tasks: [{
        start_time: new Date(2013, 2, 13, 7, 47),
        end_time: new Date(2013, 2, 15, 7, 47),
        Description: “design the page”
    }, {
        start_time: new Date(2013, 3, 13, 7, 47),
        end_time: new Date(2013, 2, 13, 7, 47),
        Description: “coding the page”
    }]
}] 

}

我有这个复杂的数据库结构。现在我需要在 JavaScript 之后添加一项新技术并对其进行评级。我还需要编辑具有“设计页面”描述的任务描述。

4

1 回答 1

1

要添加新技术,请使用 $push 或 $addToSet。要更新项目部分中的描述,请使用位置运算符 $ 和 $set 。记住子文档中的顺序不是一直保持的。因此,如果您想要技术密钥中的顺序,请再添加一个名为 Order 的密钥,并在每个子文档中使用它。在客户端显示时,您可以订购它。我删除了我的第二个查询。如果您希望在有限制的情况下这样做,其中一种方法是您可以在客户端提取数据,然后更新文档并将其保存回来,但是没有直接命令可以这样做,您必须在客户端循环

db.Collection.update({"name" : "Bimal"} , { "technology" : { $addToSet : { name: “New Technology”,rating: 1}}})

如果可能的话,如果你没问题,你可以像这样重新构建你的文档

  {tasks : [{ "ProjectName: "" , startDate : "" , EndDate : "" , Description : "" } ]

我知道它会多次复制数据,但这将是您可以更新任务子文档中的任何字段的一种方式。

于 2013-04-09T08:21:52.553 回答