簡體   English   中英

mongodb使用PHP更新文檔中的嵌套數組

[英]mongodb updating nested array in a document using PHP

文檔結構示例是:

{
   "dob": "12-13-2001",
   "name": "Kam",

   "visits": {
     "0": {
       "service_date": "12-5-2011",
       "payment": "40",
       "chk_number": "1234455",  
    },
     "1": {
       "service_date": "12-15-2011",
       "payment": "45",
       "chk_number": "3461234",  
    },
     "2": {
       "service_date": "12-25-2011",
       "payment": "25",
       "chk_number": "9821234",  
    } 
  } 
}

我試圖只更新訪問中的“付款” - 2和訪問中的chk_number - 1使用以下內容:


$query_criteria =  array("name" => "Kam", "dob" => "12-13-2001");

$updated_data = array();

$updated_data['visits'][1]['chk_number'] = 567;
$updated_data['visits'][2]['payment'] = 100;

$ret = $collection->update( $query_criteria, array('$set' => $updated_data), array("safe" => true) );

但是此更新會刪除所有訪問並使用僅包含payment和chk_number的vists覆蓋它們。

我是mongodb和PHP的新手。 任何人都可以指出我做錯了什么以及如何解決這個問題。

提前謝謝了........

您應該使用點表示法。

db.collection.update(query_criteria, 
                     {$set: {'visit.2.payment': 100, 
                             'visit.1.chk_number': 567}});

你在做什么是這樣的:

db.collection.update(query_criteria, 
                     {'visit' : {'2' : {'payment': 100}}, 
                                {'1': {'chk_number': 567}}});

它基本上意味着“找到一個文件並用這個新文件覆蓋它”。

我寫的代碼是在Javascript中(因為它們會出現在mongo shell中)。 我把它留給你翻譯成適當的PHP(我不是一個PHP人)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM