2011-07-09 120 views
1

我试图通过PHP更新MongoDB文档。 我的问题是,当我更新时,文档数据被删除,因此比我更新的其他数据不见了。MongoDB更新替换文档

我更新之前,该文件是这样的:

{ 
    "_id": { 
     "$oid": "4e178b45419866350f000001" 
    }, 
    "Twitter": { 
     "_id": { 
      "$oid": "4e178b45419866350f000000" 
     }, 
     "created": { 
      "$date": "2011-07-08T22:57:09Z" 
     }, 
     "userid": "5552362" 
    }, 
    "created": { 
     "$date": "2011-07-08T22:57:09Z" 
    } 
} 

以下是我更新:

$r = $Profile->update(
     array('Twitter._id' => new MongoId($profile['_id'])), 
     array(
      '$set' => array(
       'Twitter' => array(
        'name' => $user['name'], 
        'username' => $user['screen_name'], 
        'url' => $user['url'], 
        'modified' => new MongoDate() 
       ) 
      ) 
     ), 
     array('safe' => true) 
    ); 
    debug($r); 
+0

可能重复[在mongodb中更新嵌套文档](http://stackoverflow.com/questions/1145956/updating-nested-documents-in-mongodb) –

+0

该文档在完成更新后如何查看? – Theo

+0

你不应该用'$'给你的属性加前缀,参见http://www.mongodb.org/display/DOCS/Legal+Key+Names – Theo

回答

4

我想你想这种更新:

$Profile->update(
    array('Twitter.userid' => $user['id']), 
    array(
     '$set' => array(
      'Twitter.name' => $user['name'], 
      'Twitter.username' => $user['screen_name'], 
      'Twitter.url' => $user['url'], 
      'Twitter.modified' => new MongoDate() 
     ) 
    ), 
    array('multiple' => true) 
);