溫習(xí)了MongoDB的插入操作,主要使用PHP語(yǔ)言實(shí)踐。
目的
- 理解官方shell和PHP SDK操作的差異
- 以MySQL的思維理解MongoDB的shell,感覺差異還是很大的
- 理解有多少種插入操作,以及差異點(diǎn)
- 重點(diǎn)理解異常操作,如何看官方文檔
mongoDB shell
insertMany()、insert()、insertOne()三個(gè)方法大體上是差不多的,insertMany()相當(dāng)于批處理,insertOne()是插入當(dāng)個(gè),這兩個(gè)函數(shù)返回的對(duì)象沒有明確指示,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)覺得特別讓人難以理解,若何知曉插入了那些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ò)誤類型,比如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();
}
整體上和官方文檔描述沒有太大的差異。
參考:
- 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)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Springboot整合MongoDB進(jìn)行CRUD操作的兩種方式(實(shí)例代碼詳解)
- MongoDB的基本操作實(shí)例詳解【服務(wù)端啟動(dòng),客戶端連接,CRUD操作】
- mongoDB中CRUD的深入講解
- MongoDB 常用的crud操作語(yǔ)句