[PHP Mongodb] Upsert

Pada suatu kasus kita membuat sebuah field yang uniq. Dimana ketika dari field yang uniq tersebut ada nilai yang sama, maka opsinya adalah kita harus tidak dilakukan penyimpanan, tetapi pembaharuan data (update). Sebagai contoh kasus, kita memiliki colection “member” dimana memiliki field “id”,”email”,”name”,”address”. We make field “email” uniq and we save a data like this :

 $varvalue = array(
                'email' => 'youremail@email.com',
                'name' => 'Your Name',
                'address'=>'Your Address',
            );
            $collection->insert($varvalue,array('safe'=>true));

Lalu kita ingin menyimpan data lagi yang ternyata memiliki alamat email yang sama dengan data sebelumnya. Yah, maka dari itu kita harus membuat mekanisme kembali dimana mekanisme nya adalah :

if(email is unique)
   insert new data
else
   update old data that have same email

Yah, itulah mekanismenya. Tapi pada mongodb, kita tidak perlu repot memikirkan mekanisme tersebut. Telah ada sebuah operas bernama “upsert” yang akans secara otomatis menjalankan mekanisme tersebut. Berikut contoh codenya :

 
            $varvalue = array(
                'name' => 'Your Name',
                'address' => 'Your Address',
            );
            $collection->update(array('email' =>'youremail@email.com'),$varvalue,array('upsert'=>True));

You can see that we have “upsert”=>True in the update code. Itu artinya fungsi update tersebut akan menjalankan mekanisme berikut :

if(there's data that have same email)
    update old data that have same email with new "name" and "address"
else
    insert new data with "email", "name", and "address"

Finish.. Happy coding..

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: