次の形式のmongodbコレクションがあります
{ "_id" : ObjectId("50072b17b4a6de3b1100000f")
"employment_details" : [
{
"_id" : ObjectId("50072b17b4a6de3b11000015"),
"title" : "Information Technology Compliance & Security",
"rank" : null,
"department" : null,
"current" : true,
"company_id" : ObjectId("5007269fb4a6de941001d19d")
}
]
}
私が必要とするのは、「employment_details」配列が空であるか存在しない場合は、employment_details に新しい値を作成して挿入する必要があることです。それ以外の場合は、このような詳細をプッシュする必要があります。
{ "_id" : ObjectId("50072b17b4a6de3b1100000f")
"employment_details" : [
{
"_id" : ObjectId("50072b17b4a6de3b11000015"),
"title" : "Information Technology Compliance & Security",
"rank" : null,
"department" : null,
"current" : false,
"company_id" : ObjectId("5007269fb4a6de941001d19d")
}
......
{
"_id" : ObjectId("50072b17b4a6de3b11000018"),
"title" : "security engineer",
"rank" : null,
"department" : null,
"current" : false,
"company_id" : ObjectId("5007269fb4a6de941001dasd")
}
{
"_id" : ObjectId("50072b17b4a6de3b11000016"),
"title" : "software Engineer",
"rank" : null,
"department" : null,
"current" : true,
"company_id" : ObjectId("5007269fb4a6de94100189e")
}
]
}
しかし、注意が必要なのは、特定の従業員の雇用の詳細をプッシュしているため、" employment_details "内の" current " フィールドは、新しく挿入された連絡先に対してのみtrueに設定する必要があり、古い employee_details の他のすべての " current " フィールドを設定する必要があることです。 false、上記の例で述べたように。
実際には、新しいEmployment_detailが挿入されると、その現在のフィールドをtrueに設定する必要があり、以前の employee_details の他のすべての現在のフィールドをfalseに設定する必要があります。
値をプッシュするための一般的な構文は知っていますが、古い値を更新して新しい値をプッシュする方法は?
私の質問が明確であることを願っています。
更新コード(私が試したこと):
$my_collection->update(
array("_id"=>$id),
array('$push' =>
array(
"employment_details" => array("title" => $title, "rank" => $rank, "department" => $dept, "current" => "true", "company_id" => $c_id)
))
);
しかし、以前の値を更新する方法がわかりません。