a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 數(shù)據(jù)庫(kù) > MongoDB > 正文

MongoDB CRUD操作中的插入實(shí)例教程

2020-10-29 18:40:20
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

溫習(xí)了MongoDB的插入操作,主要使用PHP語(yǔ)言實(shí)踐。

目的

  • 理解官方shell和PHP SDK操作的差異
  • 以MySQL的思維理解MongoDB的shell,感覺(jué)差異還是很大的
  • 理解有多少種插入操作,以及差異點(diǎn)
  • 重點(diǎn)理解異常操作,如何看官方文檔

mongoDB shell

insertMany()、insert()、insertOne()三個(gè)方法大體上是差不多的,insertMany()相當(dāng)于批處理,insertOne()是插入當(dāng)個(gè),這兩個(gè)函數(shù)返回的對(duì)象沒(méi)有明確指示,insert()相當(dāng)于批處理,如果插入的是單個(gè)文檔,返回的是WriteResult對(duì)象,如果是多個(gè)文檔返回BulkWriteResult對(duì)象(真正的批量操作)。

如果產(chǎn)生異常,則會(huì)返回writeConcernErrors和writeErrors兩種錯(cuò)誤,有兩個(gè)細(xì)節(jié)。

如果是批量插入,ordered是true,則遇到一個(gè)錯(cuò)誤,后面就不返回了,反之則會(huì)繼續(xù)運(yùn)行,不過(guò)最終都會(huì)拋出異常。

其次遇到異常就不會(huì)返回_ids,這一點(diǎn)覺(jué)得特別讓人難以理解,若何知曉插入了那些ID?

再次強(qiáng)調(diào),對(duì)于MongoDB來(lái)說(shuō),只能保證單個(gè)文檔插入是原子性的。另外MongoDB插入的文檔不存在,則會(huì)自動(dòng)插件文檔。

db.collection.insertMany(  [ <document 1> , <document 2>, ... ],  {   writeConcern: <document>,   ordered: <boolean>  })

PHP SDK

各個(gè)語(yǔ)言SDK和官方SHELL是差不多的,看的時(shí)候可以對(duì)照著看。

對(duì)于insertMany函數(shù)來(lái)說(shuō),如果處理正常返回的是MongoDB/InsertManyResult對(duì)象,它實(shí)際上是MongoDB/Driver/WriteResult 擴(kuò)展的包裝。

如果遇到異常,可以通過(guò) MongoDB/Driver/Exception/WriteException::getWriteResult 擴(kuò)展方法獲取,它返回的實(shí)際上也是MongoDB/Driver/WriteResult對(duì)象。該對(duì)象的getWriteConcernError、getWriteErrors函數(shù)可以獲取具體的錯(cuò)誤信息,從而決定程序如何處理。

對(duì)于異常來(lái)說(shuō),還有其他錯(cuò)誤類(lèi)型,比如MongoDB/Exception/InvalidArgumentException、MongoDB/Driver/Exception/RuntimeException。

最后通過(guò)一個(gè)例子來(lái)說(shuō)明:

$obj = $collection->insertMany(  [   [      '_id' => "5f03014f73efc304f72dc6e2",      'email' => 'admin@example.com',    ],    [      'username' => 'test',      'email' => 'test@example.com',    ]  ],[ "ordered"=>false]  );  $obj->getInsertedCount();  $obj->getInsertedId();} catch (/MongoDB/Exception/InvalidArgumentExceptio $e) {} catch (/Exception $e) {  $obj = $e->getWriteResult();  $data_1 = $obj->getWriteErrors();  $data_2 = $obj->getInsertedCount();  $data_3 = $obj->getUpsertedIds();}

整體上和官方文檔描述沒(méi)有太大的差異。

參考:

  • https://www.php.net/mongodb-driver-writeexception.getwriteresult
  • https://www.php.net/class.mongodb-driver-writeresult
  • https://docs.mongodb.com/manual/reference/method/db.collection.insertMany/
  • https://docs.mongodb.com/php-library/v1.4/reference/method/MongoDBCollection-insertMany/

總結(jié)

到此這篇關(guān)于MongoDB CRUD操作中的插入的文章就介紹到這了,更多相關(guān)MongoDB CRUD操作插入內(nèi)容請(qǐng)搜索武林網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持武林網(wǎng)!

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产一区二区三区久久久 | 九九热这里| 日本精品一区二区三区视频 | 日韩欧美视频在线 | 一区二区在线免费观看 | 久久精品网址 | 欧美亚洲国产精品 | 日韩精品视频在线播放 | 国产精品一区二区三区免费视频 | 亚洲精品在线播放视频 | 色网在线视频 | 噜噜av| 一区免费视频 | 男女免费视频 | 奇米影| 日本视频在线观看 | 国产成人亚洲综合 | 国产中文字幕在线观看 | 亚洲国产91 | 69性欧美高清影院 | 色视频在线观看 | 综合精品久久久 | 国产伦精品一区二区三区视频网站 | 中文字幕在线第一页 | 欧洲美女7788成人免费视频 | 亚洲第一精品在线 | 色婷婷久久久swag精品 | 国产精品一区二区三区在线免费观看 | 色婷婷综合久久久中文字幕 | 欧美一级片在线观看 | 日本一级中文字幕久久久久久 | 亚洲一区二区三区四区的 | 久久久久性视频 | 中文字幕日韩欧美 | 亚洲精品一区二区三区蜜桃下载 | 午夜av不卡| 97人人爱 | 精品电影 | 欧日韩不卡在线视频 | 九一午夜精品av | 99色影院|