2016-11-04 9 views
0

背景説明mongoで文書に情報を追加する方法は?

私は私のmongoデータベースで次のデータを持っている:私は今、私が追加する必要があるデータが含まれているCSVファイルをループするスクリプトを書いてい

{ "_id" : 
     ObjectId("581c97b573df465d63af53ae"), 
     "ph" : "+17771111234", 
     "fax" : false, 
     "city" : "abd", 
     "department" : "", 
     "description" : "a test" 
} 

資料。例えば、データは次のようになります。

{ "_id" : 
     ObjectId("581c97b573df465d63af53ae"), 
     "ph" : "+17771111234", 
     "fax" : false, 
     "city" : "abd", 
     "department" : "", 
     "description" : "a test", 
     "contact_locations": [ 
      { 
       "stime": "10:15", 
       "etime": "12:15", 
       "email": "[email protected]" 
      }, 
      { 
       "stime": "1:00", 
       "etime": "9:00", 
       "email": "[email protected]" 
      }, 
     ] 
} 

問題

私は「コード:

+17771111234, 10:15, 12:15, [email protected] 
+17771111234, 1:00, 9:00, [email protected] 

は最終的に私はこのようになりますMongoのドキュメントで終わるしたいです書かれたものは、既存のものに追加するのではなく、実際に新しい文書を作成しています。そして、実際には、CSVファイルの行ごとに新しい文書を作成することさえありません。なぜそれをまだ十分にデバッグしていないのですか。 csvファイルの行ごとに

コード

は、私が「追加する方法はあり

while(!$csv->eof() && ($row = $csv->fgetcsv()) && $row[0] !== null) { 
    //code that massages the $row into the way I need it to look. 
    $data_to_submit = array('contact_locations' => $row); 
    echo "proving that the record already exists...: <BR>"; 
    $cursor = $contact_collection->find(array('phnum'=>$row[0])); 
    var_dump(iterator_to_array($cursor)); 

    echo "now attempting to update it....<BR>"; 
    // $cursor = $contact_collection->update(array('phnum'=>$row[0]), $data_to_submit, array('upsert'=>true)); 
     $cursor = $contact_collection->insert(array('phnum'=>$row[0]), $data_to_submit); 
    echo "AFTER UPDATE <BR><BR>"; 
    $cursor = $contact_collection->find(array('phnum'=>$row[0])); 
    var_dump(iterator_to_array($cursor)); 
    } 
} 

質問

  1. 次のロジックを実行していますよ"文書に?または、既存の文書を取得し、配列として保存し、連絡先の場所の配列をメイン文書とマージしてから再保存する必要がありますか?

  2. 「contact_locations」オブジェクトがドキュメント内にすでに存在するかどうかを確認するにはどうすればよいですか?

答えて

1

こんにちは、あなたはそれを行うことができます!

あなたのドキュメントを見つけて、あなたが必要とする新しい値をプッシュする必要が第一:

使用findAndModify$addToSet

$cursor = $contact_collection->findAndModify(
    array("ph" => "+17771111234"), 
    array('$addToSet' => 
     array(
      "contact_locations" => array(
       "stime"=> "10:15", 
       "etime"=> "12:15", 
       "email"=> "[email protected]" 
      ) 
     ) 
    ) 
); 

最良の部分が必要になりますので、文句を言わない2時間に同じものを追加し$addToSetです同じ値の2倍ではありません:)

ここでドキュメントhttps://docs.mongodb.com/manual/reference/operator/update/addToSet/

0

私はこれまでPHPを実行したことのない正確な構文がわかりませんが、現在MongoDBでJSで同じことをやっており、探している方法は$pushです。また、もし私が少しニッキーであるかもしれないなら、私は変数名として$ contact_collectionを$ contact_locationsに変更することをお勧めします。配列変数名は通常複数であり、より記述的である方が常に優れています。追加するMongoDBの配列が最初に見つかっていることを確認し、MongoDbの "update"コマンドを使用することを確認してください

関連する問題