2011-07-09 9 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) 
); 
関連する問題