天天看點

PHP與MONGODB的UPDATE操作

因為mongoDB的update方法有很多與no-sql不同的地方,是以把它單獨拿出來讨論。

php的mongoDB之update方法中

隻談到了php方法和文法,

http://www.php.net/manual/en/mongocollection.update.php

但這是遠遠不夠的。

mongoDB的官方手冊中:

隻提到了command方式的寫法

http://www.mongodb.org/display/DOCS/Updating

沒有php的具體實做方法。

在學習和實踐中,要把兩個手冊結合起來用。

$inc

如果記錄的該節點存在,讓該節點的數值加N;如果該節點不存在,讓該節點值等于N

設結構記錄結構為 array(’a'=>1,’b'=>’t'),想讓a加5,那麼:

$coll->update(

array(’b'=>’t'),

array(’$inc’=>array(’a'=>5)),

)

$set

讓某節點等于給定值

設結構記錄結構為 array(’a'=>1,’b'=>’t'),b為加f,那麼:

array(’a'=>1),

array(’$set’=>array(’b'=>’f')),

$unset

删除某節點

設記錄結構為 array(’a'=>1,’b'=>’t'),想删除b節點,那麼:

array(’$unset’=>’b'),

$push

如果對應節點是個數組,就附加一個新的值上去;不存在,就建立這個數組,并附加一個值在這個數組上;如果該節點不是數組,傳回錯誤。

設記錄結構為array(’a'=>array(0=>’haha’),’b'=>1),想附加新資料到節點a,那麼:

array(’b'=>1),

array(’$push’=>array(’a'=>’wow’)),

這樣,該記錄就會成為:array(’a'=>array(0=>’haha’,1=>’wow’),’b'=>1)

$pushAll

與$push類似,隻是會一次附加多個數值到某節點

$addToSet

如果該階段的數組中沒有某值,就添加之

設記錄結構為array(’a'=>array(0=>’haha’),’b'=>1),如果想附加新的資料到該節點a,那麼:

array(’$addToSet’=>array(’a'=>’wow’)),

如果在a節點中已經有了wow,那麼就不會再添加新的,如果沒有,就會為該節點添加新的item——wow。

$pop

設該記錄為 array(’a'=>array(0=>’haha’,1=>’wow’),’b'=>1)

删除某數組節點的最後一個元素:

array(’$pop=>array(’a'=>1)),

删除某數組階段的第一個元素

array(’$pop=>array(’a'=>-1)),

$pull

如果該節點是個數組,那麼删除其值為value的子項,如果不是數組,會傳回一個錯誤。

設該記錄為 array(’a'=>array(0=>’haha’,1=>’wow’),’b'=>1),想要删除a中value為haha的子項:

array(’$pull=>array(’a'=>’haha’)),

結果為: array(’a'=>array(0=>’wow’),’b'=>1)

$pullAll

與$pull類似,隻是可以删除一組符合條件的記錄。