在IBM我的一份新工作是一名開發(fā)的后勤人員。那意味著我的大部分時(shí)間是在和數(shù)據(jù)庫打交道。在我的工作流程中,我花了一些時(shí)間在MongoDB上面——這是一個(gè)文檔數(shù)據(jù)庫。但是在通過ID來檢索記錄這個(gè)操作上面我碰到了一些問題。下面的代碼是最終版本,以后碰到類似的問題我可以直接引用它。如果大家也需要,希望下面對大家有所幫助。
MongoDB 和 IDs
當(dāng)我向一個(gè)集合中插入數(shù)據(jù)的時(shí)候,我并沒有設(shè)置_id字段;如果這個(gè)字段是空的話,那么MongoDB將要自動(dòng)生成一個(gè)ID來使用,這對我來說是非常不錯(cuò)的。然而,當(dāng)我使用MongoDB生成的標(biāo)識符的時(shí)候,這樣就會(huì)出現(xiàn)問題。
如果我使用db.posts.find()來檢索我的數(shù)據(jù)(我的集合被稱為posts),那么數(shù)據(jù)開起來如下所示:
{ "_id" : ObjectId("575038831661d710f04111c1"), ...
因此,如果我想用ID來檢索數(shù)據(jù)的話,我還需要包含ObjectId方法來訪問ID。
使用PHP庫
當(dāng)我使用PHP來做這個(gè)事情的時(shí)候,我在使用這個(gè)新的PHP類庫的時(shí)并沒有找到一個(gè)合適的例子(但是,這個(gè)類庫確實(shí)是一個(gè)非常不錯(cuò)的庫)。在以前的版本中,這個(gè)庫使用一個(gè)叫做MongoID的類來實(shí)現(xiàn)。但是我知道這并不是我想要的——但是我確實(shí)可以通過這個(gè)類來檢查文檔。因此如果你僅僅能找到以前代碼中的例子,那了解這個(gè)方法還是很有用的。
通過用這個(gè)PHP庫將一個(gè)ID傳給MongoDB,你需要構(gòu)造一個(gè)MongoDB\BSON\ObjectID實(shí)例。下面的例子就是通過文檔的Id來檢索博客中的文檔。
$post = $posts->findOne(["_id" => new MongoDB\BSON\ObjectID($id)]);
然后,我將要更新這條記錄——這個(gè)博客帖子在這條記錄中還包含有嵌入的評論,因此向得到_id的這條記錄中的評論集合中添加一個(gè)數(shù)組,
$result = $posts->updateOne(
["_id" => new MongoDB\BSON\ObjectID($id)],
['$push' => [
"comments" => $new_comment_data
]
]);
最后希望本文對大家有所幫助。謝謝大家對本站的支持!
您可能感興趣的文章:- 分布式文檔存儲(chǔ)數(shù)據(jù)庫之MongoDB訪問控制的操作方法
- 分布式文檔存儲(chǔ)數(shù)據(jù)庫之MongoDB備份與恢復(fù)的實(shí)踐詳解
- 分布式文檔存儲(chǔ)數(shù)據(jù)庫之MongoDB分片集群的問題
- SpringDataMongoDB多文檔事務(wù)的實(shí)現(xiàn)
- mongodb如何對文檔內(nèi)數(shù)組進(jìn)行過濾的方法步驟
- MongoDB中文檔的更新操作示例詳解
- MongoDB數(shù)據(jù)庫文檔操作方法(必看篇)
- mongodb 數(shù)據(jù)類型(null/字符串/數(shù)字/日期/內(nèi)嵌文檔/數(shù)組等)
- MongoDB如何更新多級文檔的數(shù)據(jù)