我需要使用PHP更新mongo中的多個嵌入式文檔。我的佈局看起來像這樣:更新mongoDB中的多個嵌入式文檔
{
_id: id,
visits : {
visitID: 12
categories: [{
catagory_id: 1,
name: somename,
count: 11,
duration: 122
},
{
catagory_id: 1,
name: some other name,
count: 11,
duration: 122
},
{
catagory_id: 2,
name: yet another name,
count: 11,
duration: 122
}]
}
}
該文檔也可以有多個訪問。
現在我想更新2個類別,一個與id=1
和name=somename
和另一個id=1
和name=some_new_name
。他們都應該增加1,「持續時間」增加45.
第一個文件存在,但第二個文件不存在。有這樣的功能的
即時通訊思想:
function updateCategory($id, $visitID,$category_name,$category_id) {
$this->profiles->update(
array(
'_id' => $id,
'visits.visitID' => $visitID,
'visits.categories.name' => $category_name,
'visits.categories.id' => $category_id,
),
array(
'$inc' => array(
'visits.categories.$.count' => 1,
'visits.categories.$.duration' =>45,
),
),
array("upsert" => true)
);
}
但是有了這個,我需要調用每個類別我會更新的功能。在一次通話中有沒有辦法做到這一點?
編輯:
改變了佈局位並取得「類別」的對象,而不是陣列。然後使用「category_id」和「category_name」作爲屬性名稱的組合。像:
categories: {
1_somename : {
count: 11,
duration: 122
},
1_some other name : {
count: 11,
duration: 122
},
2_yet another name : {
count: 11,
duration: 122
},
}
然後用UPSERT和像
$inc: {
"visits.$.categories.1_somename.d": 100,
"visits.$.categories.2_yet another name.c": 1
}
我可以更新幾個 「對象」 在一次東西..
似乎它只會更新一個subdoc作爲多個指根文件....嗯 – sunebrodersen 2011-06-06 09:48:03