2011-08-11 28 views
2

私は少し問題があります、あなたが私を助けることを願っています。 私はMongoDBの中で次の配列構造を有する:MongoDBの内部配列にデータを挿入

{ 
"_id":ObjectId("4e43cf96e7c7914b87d2e0ff"), 
"list" :[ 
    { 
    "id" : ObjectId("4e43cf96e62883ee06000002"), 
    "user_name" : "login", 
    "comments" : [ ] //insert here new data 
    }, 
    { 
    "id" : ObjectId("4e43cf96e62883ee06000003"), 
    "user_name" : "login", 
    "comments" : [ ] 
    } 
] 
} 

そして、私は「list.id」でのコメントに新しいデータを挿入します。

$post_id = "4e43cf96e62883ee06000002"; 
$this->connection->user->feed->update(
    array ('list.id' => new MongoId($post_id)), 
    array ('$push' => array ('list'=>array('comments'=>$data))) 
) 

しかし、そのコードは、構造体の新しいフィールドを作成しますが、 'コメント' 欄にデータを追加していない:しかし、私はそのようにしてみてください

{ 
"_id":ObjectId("4e43cf96e7c7914b87d2e0ff"), 
"list" :[ 
    { 
    "id" : ObjectId("4e43cf96e62883ee06000002"), 
    "user_name" : "login", 
    "comments" : [ ] //insert here new data 
    },  
    { 
    "id" : ObjectId("4e43cf96e62883ee06000003"), 
    "user_name" : "login", 
    "comments" : [ ] 
    },    
    { 
    "comments" : { //added new field 
     //there is my data 
    } 
] 
} 

をも私が試した:

$this->connection->user->feed->update(
    array ('list.id' => new MongoId($post_id)), 
    array ('$push' => array ('list.comments'=>$data)) 
); 

しかし何も。

答えて

10

これはMongoのコンソールで正常に動作します:)

db.yar.update({"list.id":ObjectId("4e43cf96e62883ee06000002")}, {"$addToSet":{"list.$.comments":"my cool comment"}}); 
+0

yea、あなたは正しい;)たくさんありがとう!そして、 "$。"という文字が "リスト。$コメント"の中で何を意味するのかを教えてください。または私に参照を与える?ありがとう! –

+1

[[docへのリンク](http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator) – Igorekk

1

コメントは配列ではないフィールドなので、$ addToSet修飾子を使用してください。

+0

(新しいフィールドを追加し、私は「$ addToSet」から「$プッシュ」を変更するが、そのコードは「$プッシュ」と同じ振る舞いを持って、私は例を示しています –

+0

)また、 '$ push'を使用して 'list'配列にデータを追加し、 '$ push'で動作します。 –

+0

または私のコードに間違いがありましたか? –

関連する問題