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 を使用します。Project セクションの説明を更新するには、位置演算子 $ と $set を使用します。サブドキュメントの順序が常に維持されているわけではないことに注意してください。したがって、テクノロジー キーに順序が必要な場合は、Order というキーをもう 1 つ追加し、各サブドキュメントで使用してください。クライアント側で表示しながら注文できます。2 番目のクエリを削除しました。制限があってもやりたい場合の方法の 1 つは、クライアント側でデータをプルしてからドキュメントを更新して保存し直すことですが、そうするための直接的なコマンドはありません。クライアント側でループする必要があります。

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

可能であれば、問題がなければ、次のようにドキュメントを再構築できます

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

データが何度も複製されることはわかっていますが、これはタスク サブ文書のフィールドを更新する方法の 1 つです。

于 2013-04-09T08:21:52.553 に答える