2015-07-11 45 views
1

我有一個集合collflokks MongoDB中,以替換元素,樣本文檔是: -如何在一個數組

{ 
    "_id" : "b_8AUL", 
    "f_name" : "Pizza. Hut", 
    "f_lat" : "22.7523513", 
    "f_lng" : "75.9225847", 
    "c_uid" : "33", 
    "f_type" : NumberLong(3), 
    "members" : [  
     "42",  
     "43" 
    ] 
} 

內「成員」陣列,我想增加數組一樣{id:42,name:Mark}{id:43,name:Hughes} 目前我只是添加ID(例如42,43)。我只關心新數據,因爲它會有新的ID。請建議。

早些時候,我使用此代碼推入成員數組:

$flokkCollection = 'collFlokks'; 
$flokkCollection->update(
     array("_id" => $f_handle), 
     array('$push' => array("members" => $u_id)) 
); 

回答

1

好吧,如果你問這裏是「替換現有的數據」,那麼你需要從收集到「循環」的結果並用您的新格式「替換」存在的數組內容。

有可能更聰明的方法來處理這個問題,但你並沒有真正給我們提供所有你需要的信息,所以我只能用基本的術語來回答。

假設你有:

$required = array(
    array(array("id" => "42"), array("name" => "Mark")), 
    array(array("id" => "43"), array("name" => "Hughes")) 
); 

作爲輸入,然後你做這樣的事情:

function myMapper($v) { 
    return $v["id"]; 
} 

$mapped = array_map("myMapper",$required); 

foreach($mapped as $value) { 

    $filtered = array_values(
     array_filter($required,function($k) { 
      return $k["id"] == $value; 
     }) 
    )[0]; 

    collection.update(array(
     array("members" => $value), 
     array('$set' => array( 
      "members.$" => $filtered 
     )) 
    )); 
} 

哪些應該使用positional $ operator找到由數組元素的匹配的「位置」值用於更新語句的「查詢」部分,然後在該語句的「更新」部分$set表示當前數組索引爲來自原始輸入數組的「過濾」內容索引處的新值。

以外的PHP。我們將這些內部元素稱爲「對象」,而不是「數組」,這是PHP符號特徵。鍵/值的東西是「對象」,「列表」是「數組」。

+0

我很抱歉沒有提供適當的信息,因爲我不習慣在這裏提問。其實,我想改變功能,以新的方式推入陣列 - ID和名稱...我想我解決了它使用: - $ user_data = array( 'uid'=> $ u_id, 'name' =>「Dishu」 ); array('$ push'=> array(「members」=> $ user_data))); – dgcoder

+0

@dgcoder beyonf的問題並不是那麼重要,我的觀點是可能有更好的方法將「Mark」和「Hughes」映射到相關的「id」值中,以實現您真正想要做的事情。無論如何,這應該至少爲總體過程提供指導。 –

+0

@dgcoder你沒有「解決它」。您或者需要「刪除」或「替換」,因爲此示例顯示瞭如何操作現有陣列成員。否則,你只需要結束現有的陣列成員和添加「新」成員,這顯然是你**不需要的。 –