mongodb的基本操作與插入文檔(document)


一.mongodb的基本操作:

  1.查看mongodb當前所有的databases : show dbs

  2.選擇數據庫(database) : use databaseName(該數據庫不存在則會自動創建,但是只存在於mongodb預設的緩存中,如果你不做任何操作,關閉數據庫,那么該數據庫也就不存在了,如果你往該庫中添加了數據,那么該庫就被真正的創建了)

  3.查看數據庫中的集合(collection) : show collections 

  4.獲取mongodb中的幫助 : db.help() 里面有很多的實用性的操作,在你不知道mongodb有哪些操作的時候很有幫助

  5.刪除數據庫 : use databaseName(必須先選擇要刪除的數據庫), db.dropDatabase()

  6.刪除指定數據庫下面的集合: use databaseName(必須先選擇要刪除集合的數據庫), db.collectionName.drop()

二.mongodb插入文檔

  因為我們的mongodb使用javascript做shell的,所以可以說mongodb的客戶端編程跟javascript差不多

  往集合中插入的文檔,其格式與json基本一樣,所以存儲在集合中的文檔的格式都是bson,bson是一種類json的二進制形式的存儲格式,稱之為binary json

  往集合中插入新的文檔有兩種方式,一種是insert(),一種是save()

  區別:

    insert()方法:當插入數據時,已經存在的_id的數據,則mongodb會直接報錯,並返回對應的_id

    save()方法:當插入數據時,它會先去循環一遍集合中的所有數據,判斷插入的數據的_id是否存在於集合中,如果不存在則會直接插入一條新的文檔,如果存在,則會調用mongodb的update()方法,更新_id對應的數據(相當於覆蓋該_id的文檔內容)

  語法:

    db.collectionName.insert(document)

    db.collectionName.save(document)

  注意:

    1.在插入數據之前,需要注意的是mongodb對於field(字段)的數據類型非常的敏感,比如你插入了一個age字段,內容為30,是一個string類型的,但是你如果用一個整型30去查詢,是查不到該數據的,因為數據類型不對,所以插入數據的時候要慎重,考慮好字段的類型

    2.雖然mongodb靈活性很強,不像關系型數據庫那樣,建立一個新的字段,所有的數據都有該字段,但是在實際開發中,本人還是建議你插入數據盡量保持每一個集合的字段都相同,這樣方便你在程序中的開發

  1.插入文檔方法之insert()

    

    

    從上圖可以看出,當你插入一條數據成功后,會返回寫入的結果,插入成功,插入1條[ WriteResult({ "nInserted" : 1 }) ],而且你會發現,每條數據前面出現了一個"_id"的,它跟我們使用的關系型數據庫不太一樣,我們使用的關系型數據庫一般primary key都是id,而且是自增的(1,2,3,4.....),而它這個是mongodb內為每條文檔生成的一個唯一的標識,也具有唯一性,但是不會像關系型數據庫那樣自增而已,當然我們也可以插入指定的"_id"(等下說save()的時候再實踐)

    a.當我們插入一條數據,這個"_id"已經存在了,會發生什么呢?

      

    b.當然insert()方法也可以插入_id(自定義_id的值,而不使用mongodb生成的_id),指定它的值跟我們關系型數據庫一樣(1,2,3,4,5,6....)

         

    c. mongodb能不能跟關系型數據庫一樣批量插入呢?關系型數據庫批量插入:insert into tablename(columns)values(text1),(text2),(text3).........,而我們的mongodb是不能批量插入的,只能通過循環來實現批量插入

      

    d.在mongodb中每個document的字段field可以不相同(mongodb的靈活性,但是不建議這么做)

      

  2.插入文檔方法之save():

    與insert()方法差不多都是插入文檔,唯一的不同就是如果_id存在,save()則會更新這條_id對應的數據,而insert則是直接報錯,並返回該_id

    

    也可以批量更新,同時不存在的則插入,存在的則更新(下圖_id只有1,2,3,通過循環更新了1,2,3,同時也添加了_id為4,5的兩條數據):

    

 

  通過上面的示例,我們可以發現:

  1.mongodb不需要事先定義collection,在第一次插入數據時,它會自動創建collection

  2.在collection中每添加一條document,除非我們自己指定_id,否則,系統都會生成一個唯一的標識ObjectId

  3.在collection中,每個document可以有不同的field(字段)

 

三、關於mongodb能不能和關系型數據庫那樣插入成功后返回插入數據的id

   本人在寫php操作mongodb的類的時候,遇到了需要返回id的問題,下面是MongoDB mode的代碼:

public function insertDocument($collection,$data=array(),$is_set=false){
        if(!$collection || empty($data) || !is_array($data)){
            die('collection and data can not be empty!');
        }
$this->collection = $this->MongoDB->{$collection};
try{ if($is_set){ //批量 $i=0; $count = count($data); while($i<$count){ $result[] = $this->collection->insert($data[$i],array('safe'=>true)); $i++; } }else{ //單條向集合中安全的插入數據,返回插入狀態 $result = $this->collection->insert($data,array('safe'=>true)); } }catch(MongoCursorException $e){ $this->error = $e->getMessage(); return false; } return array($result,$data); }

  下面是我插入的數據:

  $arr = array('name'=>'Nginx4','age'=>121,'add_time'=>'2014-03-02');

  接下來是我插入成功后返回的信息截圖:

  

  下面我進入cmd,查詢返回的_id對應的數據,看看是否存在該數據,並且數據是否正確(數據一致):

  

  對比一下插入的數據,和返回的數據,你會發現插入的數據的數組中多了一個_id,mongodb在添加新的文檔之前會把_id生成好,拼接到數組中,然后插入到集合中,所以我們只需要返回你要插入的數據的數組就可以得到該數據插入到集合后的_id了

 

  如有錯誤的地方,歡迎批評指正,本人新手,初學!!!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM