{
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之后添加一项新技术和评级。我还需要编辑具有“设计页面”描述的任务描述。
答案 0 :(得分:1)
要添加新技术,请使用$ push或$ addToSet。要更新“项目”部分中的描述,请使用位置运算符$ with $ set。请记住,在子文档中顺序不是一直维护。因此,如果您需要技术密钥中的订单,请再添加一个名为Order的密钥,并在每个子文档中使用它。在客户端显示时,您可以订购它。 我删除了第二个查询。如果你想做甚至限制的方法之一是你可以在客户端提取数据,然后更新文档并将其保存回来,但没有直接命令这样做,你必须在客户端循环
db.Collection.update({"name" : "Bimal"} , { "technology" : { $addToSet : { name: “New Technology”,rating: 1}}})
如果可能,如果你没事,你可以像这样重新构建你的文件
{tasks : [{ "ProjectName: "" , startDate : "" , EndDate : "" , Description : "" } ]
我知道它会多次复制数据,但这是您可以更新任务子文档中任何字段的方法之一。