溫習了MongoDB的插入操作,主要使用PHP語言實踐。
目的
mongoDB shell
insertMany()、insert()、insertOne()三個方法大體上是差不多的,insertMany()相當于批處理,insertOne()是插入當個,這兩個函數返回的對象沒有明確指示,insert()相當于批處理,如果插入的是單個文檔,返回的是WriteResult對象,如果是多個文檔返回BulkWriteResult對象(真正的批量操作)。
如果產生異常,則會返回writeConcernErrors和writeErrors兩種錯誤,有兩個細節。
如果是批量插入,ordered是true,則遇到一個錯誤,后面就不返回了,反之則會繼續運行,不過最終都會拋出異常。
其次遇到異常就不會返回_ids,這一點覺得特別讓人難以理解,若何知曉插入了那些ID?
再次強調,對于MongoDB來說,只能保證單個文檔插入是原子性的。另外MongoDB插入的文檔不存在,則會自動插件文檔。
db.collection.insertMany( [ <document 1> , <document 2>, ... ], { writeConcern: <document>, ordered: <boolean> })
PHP SDK
各個語言SDK和官方SHELL是差不多的,看的時候可以對照著看。
對于insertMany函數來說,如果處理正常返回的是MongoDB/InsertManyResult對象,它實際上是MongoDB/Driver/WriteResult 擴展的包裝。
如果遇到異常,可以通過 MongoDB/Driver/Exception/WriteException::getWriteResult 擴展方法獲取,它返回的實際上也是MongoDB/Driver/WriteResult對象。該對象的getWriteConcernError、getWriteErrors函數可以獲取具體的錯誤信息,從而決定程序如何處理。
對于異常來說,還有其他錯誤類型,比如MongoDB/Exception/InvalidArgumentException、MongoDB/Driver/Exception/RuntimeException。
最后通過一個例子來說明:
$obj = $collection->insertMany( [ [ '_id' => "5f03014f73efc304f72dc6e2", 'email' => '[email protected]', ], [ 'username' => 'test', 'email' => '[email protected]', ] ],[ "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();}
整體上和官方文檔描述沒有太大的差異。
參考:
總結
到此這篇關于MongoDB CRUD操作中的插入的文章就介紹到這了,更多相關MongoDB CRUD操作插入內容請搜索武林網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持武林網!
新聞熱點
疑難解答