mongodb php代码实例,MongoDB文档的更新(php代码实例)
MongoDB更新文檔分為兩大類:
文檔替換,使用新文檔完全替換掉舊文檔
修改器,修改部分文檔
文檔替換
使用文檔替換非常的簡單,下面來看演示:
$collect->insertOne(['name' => 'lakers', 'nums'=> 16]);
$collect->replaceOne(
['name'=>'lakers'],
['name' => 'heat', 'nums'=>3]
);
使用修改器可以完成更復(fù)雜的更新操作,比如修改、增加或刪除鍵。
"$set"修改器
"$setX C e 4"用來指定一個字段的值。如果這個字段不存在,則創(chuàng)建它。
$coll^ P Q k + w k P &ect->insertOne([
'name' => 'james',
'age' => 35,
]);
$collect->updateOne(['name'=>D s v 3 g;'james'],
['$s~ f B : . 3 7et' => ['0 L 2 V R M ofruit' => 'apple']]
);
// fruit字段不存在,則會創(chuàng)建該字段
如果現(xiàn)在c J ] . R + k _不喜歡apple,想4 x y ~換成草莓
$collect->updateOne(['name'=>'james'],
['$set' => ['fruit' =&E T L u m z * =gt; 'strawberry']]
);
"$set"還可以修改鍵的類型。
# 不止喜歡草莓,還喜歡梨子、香蕉。
$collect->updateOne(['name'4 6 [ M A P e U=>'james'],
['$set' =>
['fruit' =>
['sN P H # $ #trawberry',2 q R L . & V 8 'banana', 'pear']
]T 6 m % j
]
);
"$set"也可以修改內(nèi)嵌文檔
$colJ , Q e S u ( qlect->insertOne([
'namm d s D a 8 o W %e' => 'james',
'age' =&g) 9 5 + , Y b 6 8t; 35,
'brothers' => ['name' => 'wade', 'age'=> 38]
]);
$collect->updateOne(['name'=>'james'],
['$set' =>
['brothers.name' => 'paul']
]
);
"$unset"修改器
使用"$unset"修改器可以刪除指定字段
$collect->updateOne(['name'=>'james'],
['$unset' =>
['brothers' => '']
]
);
"$inc"修改器,增加或減少數(shù)值
和"$set"修改器一樣,如果該字段不存在則自動創(chuàng)建。注意:該字段值只可以是數(shù)字。
$collect->updateOne(['name'=>'j^ L S F . 9 a kames'o } h Y],
['$inc' =>
['scores' => 61]
]
);
## 現(xiàn)有積分61
現(xiàn)在,有獲得了10點(diǎn)積分。
$collect->updateOne(['name'=>'james'],
['$inc' =&gn u S : 8 / * T 1t;
['scores' => 10]
]
);
##c 6 E q 現(xiàn), 1 v Y r有積分71
后來,用掉了50積分
$collect->updateOne(['name'=>'james'],
['$inc' =>['scores' => -50]
] );
## 現(xiàn)有v r } y積分21
數(shù)組修改器
MongoDBp J 4 d R @ k )針對數(shù)組提供了專門的修改方法。
"$push"添加元素
"$push"可以往數(shù)組里添加元素,如果該數(shù)組不存在,則會自動創(chuàng)建數(shù)組。現(xiàn)在有一個文檔用于保存文章數(shù)據(jù):
$com K Jllect->insertOne([
'_id' => 1,
'title'=>'study mongodb',
'create_time' => a 9 j U l 4'2020-08-24 12 :31'
]);
$7 o s 9 u B G _push = ['$push' => ['comments' => 'comments1'] ];
$collect->updateOne(['_id' => 1 ], $push);
"$each"添加多個元素
'$push'可以一次數(shù)組元素,如果想一次添加J v 0 | ! k f 0多個元素的話,則需要搭配使用'$each'。
$push = [
'$push' =>
['comments' =>
['$each' => ['commen7 T * H ; b o :t1', 'comment2', h Y [ 7 c W ? t'comment3']]
]
];
$collect->updateOne(['_id' => 1 ], $push);
"$slice"保留n個元素
'$push'和'$slicet'配合使用,保留最新C b $的n條數(shù)據(jù),'$slice'的值只能是負(fù)整數(shù)。比如,我只想保留最新的3條評論:
# 目前數(shù)據(jù)如下
> db.users.find()
{/ Z 4 K "_id" : 1, "title" : Q 0 w 8 T C V L h"study mongodb", "creu Y w f +ate_time" : "2020-08-24 12:31", "comment" : [ "comment1", "comment2", "comment3", "comment4", "comment5", "comment6" ] }
$pus* B 8 U 0h = [
'$pu, 0 # /sh' =&g@ 1 4 a n m N it; [
'comment' => [
'$each' =&gx N 7 e + gt; ['comment7', 'comment8'T q b A, & , ; 7'comm9 { Tent9'], '$sliceG g 9' => -3
],
],
];
$collect->updateOne(['_id' => 1 ], $push);
# 現(xiàn)數(shù)據(jù)如下
db.usX 2 H % Sers.find()
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31X . 1 A J ! , 1", "comment" : [ "comment7", "comment# o ] v H ! n8", "comment9" ] }
"$sort"排序
還可以配合'$sort'使用,保留點(diǎn)贊數(shù)最多的3條評論。
# 目前是集合內(nèi)是空的,么有任何文檔
$collect->insertOne(['_id' =A # ) ] j a { e> 1, 'title'=>'study mongodb', 'create_ti8 j qme' => '2020-08-24 12:31']);
$push = [
'$push' => [
'comment' => [
'$each' => [
['comment' => 'php', 'like' =&N ^ | Z 5gt; 100],
['comment' => 'mysql', 'like' => 10],
['comment' => 'lin? [ p - H Y `ux', 'like' => 200],
['comm4 ! / y _ 0ent' => 'java', 'like' => 1000],
['comment' => 'nginx', 'like' => 300],
['comment' => 'composer', 'like' => 500],
],
'$slice' => -3,
'$sort' =&gg 9t; ['like' => 1]
],
],
];
再來看看集合內(nèi)數(shù)據(jù)是怎樣的:
> db.user0 ^ ? g o I M 8 Ws.find()
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comme& 4 5 = ? a + 2 snt" : [ { "comment" :L m 3 8 r "nginx0 T h [", "like" : 300 }, { "comment" : "D h =composer", "like" : 500 }, { "comment" : "java", "like" : 1000 } ] }
注} l 4意不能只將 "$slice" 或者 "$sort" 與 "$push" 配合使用,且必須使用 "$each"。
"$addToSet"避免插入重復(fù)數(shù)據(jù)
使用"$addToSet"新增數(shù)組元素時,可以避免添加重復(fù)數(shù)據(jù),比如
$collect->insertOne([
'_id' => 1,
'name' => 'gwx',
'age' =>0 ? b $ 4 0 & ,; 30,
'fruits' => ['aQ G N S Q O % -pple', 'pear']
]);
$update = [
'$addToSet' => [
'fruits' => 'apple'
]
];
上面的修改不會成功,因?yàn)閍ppl5 o 2 te已經(jīng)- ( 4 C x存在。'$addTS A w xoSet'也可以和"$each"配合使用,插入多[ j o A _個數(shù)組元素。
$update = [
'$addToSet' => [
'fruits' => [
'$each' =>$ @ } ~ T; ['apple', 'banana', 'orange']
]
]
];
$collect->updateOne(['_id' => 1], $update);
刪除元素
可以通過"$pop",刪除最左端或最右端的元素9 a V 7 d。
$collect->insertOne([
'_id' => 1,
'name' => 'gwx',
'age' => 30,
'frc y p 1 V , q 7uits' => ['apple', 'pear']
]% 6 v u B ! 0 H);
#從數(shù)& E G H 8 n p k組末刪除1個元素
$update = [
'$pop' => [
'fruits' => 1
]
];
$collect->/ / S w , % 4updateOne(['_id' => 1], $updatee S ^ 5 t t u w);
# 從數(shù)組頭刪除一個元素
$update = [
'$pop' => [
'fruiW , k : K S ` gts' => -1
]
];
$collect->up5 9 #dateOne(['_id' => 1], $update);
還可以通過'$pull'刪除指定的元素
$collect->insertOne(i e | T[
'_id' => 1,
'name' => 'gwx',
'age' => 30,
'fruits' => ['app~ 2 r r p r rle', 'pear', 'apple', 'banana', 'orange']
]);
#從數(shù)組末刪除
$update = [
'$pull' => [
'fruits' => 'apple'
]
];
數(shù)組有所有apple元素都被刪除了
ug 5 A ! R } npsert
upsert是$ ) A 4 - p一種特殊的更新。但找到符合條件的集合,那么和之前的修改時一樣的。若沒有找到符合條件的集合,那么它就P K L c d * ~會以查詢條件以及修改的文檔作為一個w y 1 L新文檔插入到集合中。
下面,以一個我們經(jīng)常碰到的場景來舉例——記錄每個ip瀏覽的次數(shù)。若是新的ip,則新增到集合中,若已存在,就修改原有集合。D h [ 6 [ %
$collect->updateOne(['ip' => '116.31.23.1'], [
'$inc' =>[
'views' => 1
]
]c 3 * ] l, ['upsert' => true]);
$collect->updateOne(['ip' => '12@ = r t ] y L w7.0.0.1'], [
'$iD { $ M ? b #nc' =>[
'views' => 1
]
], ['upsert( T Z v' =>S p X j trueE * 5]);
$collect->updateOne(['ip3 n L @ H' =>2 2 L J [ '116.31.23.1'], [
'$inc' =>[
'views' => 1
]
], ['upseZ w 4 trt' => true]);
> db.users.find()
{ . _ ] e D"_id" : ObjectId("5f4336f3a95f1a505db9a2df"), "ip" : "1f [ o ] _ Q +16.31.23.1", "views" : 2 }
{ "_id~ g h U z" : ObE O c N ` ]jectId(X C | L & x * g"5f4336f3a95f1a505db9a2e1"), "ip" : "127.0.0.1", "views" : 1 }
更新多個文檔
更新多個文檔需要使用updateMany()方法,演示如下:
$collect->ir * n unsertMany([
['name' =>e N ^ 9 3 $ } O 'gwx', 'age' => 30],
['name' => 'gwx', 'age' => 30],
['name' =c ^ x ~ o / k ) 0> 'gwx', 'age' => 30],
]);
$collect->updateMaN & l U W C f Jny([
'name' => 'gwx'
],
['$set' =>['age' =L y C>z z m u P 1O J l ~8]]
);
以上就是MongoDB文~ u $ f A Y檔的更新(php代碼實(shí)~ _ ; H R s例)的詳細(xì)內(nèi)容。
總結(jié)
以上是生活随笔為你收集整理的mongodb php代码实例,MongoDB文档的更新(php代码实例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle rac添加监听,【学习笔记
- 下一篇: oracle 行送,Oracle 行专列