1. 程式人生 > 資料庫 >mongodb的寫操作

mongodb的寫操作

使用插入資料命令:

>insert

需要注意的是,如果插入一檔案(現在理解,nosql 型別的db資料不能說是記錄了,它是已檔案作為單位,而傳統型的關係型資料庫,我們說是插入一條記錄),如果沒有帶人_id,那麼會自動生成一個唯一的id,這個id好比關係型資料庫裡的主鍵一樣。

如果是自己指定id,那麼必須id是唯一的,這點關係型和nosql型都必須要求的;

資料欄位的名字不能包含$ 和.

在敲了一陣發現,擦,我要是再shell裡面去編寫複雜的插入語句,就shell的這種一行一句,不搞死我去啊。我想它肯定是支援向bat這種批處理或者其他,看它語法和js一模一樣,於是大膽猜測它使用的就是javascript,於是我就用notepad++來編輯這些插入命令,試著插入複雜的物件;

哦,另外說一句,如果這個bios資料不存在,那麼要先使用

>use bios

生成一個數據庫,如果你不往這裡插入一筆資料,mongoDB會自動刪除掉這個資料庫;

所以還要插入一筆讓mongodb維持這資料庫的任意資料

>db.bios.insert({a:'a'})

編寫了一個insert.js腳步,放在安裝目錄的js資料夾下。於是這樣輸入:

>mongolocalhost:27017/biosf:\mongodb\js\insert.js

效果如圖

可以看到,這個js腳步成功執行;

要查詢這個文件,輸入命令:

>db.bios.find({ name: { first: 'John',last: 'chen' } } );

有了js寫更多的語句,就方便多了。

Isert語句支援多個批量插入就像下面這樣:

Insert.js 語句:

db.bios.insert(
  [
   {
    _id: 3,name: { first: 'Grace',last: 'Hopper' },title: 'Rear Admiral',birth: new Date('Dec 09,1906'),death: new Date('Jan 01,1992'),contribs: [ 'UNIVAC','compiler','FLOW-MATIC','COBOL' ],awards: [
         {
          award: 'Computer Sciences Man of the Year',year: 1969,by: 'Data Processing Management Association'
         },{
          award: 'Distinguished Fellow',year: 1973,by: ' British Computer Society'
         },{
          award: 'W. W. McDowell Award',year: 1976,by: 'IEEE Computer Society'
         },{
          award: 'National Medal of Technology',year: 1991,by: 'United States'
         }
        ]
   },{
    _id: 4,name: { first: 'Kristen',last: 'Nygaard' },birth: new Date('Aug 27,1926'),death: new Date('Aug 10,2002'),contribs: [ 'OOP','Simula' ],awards: [
         {
          award: 'Rosing Prize',year: 1999,by: 'Norwegian Data Association'
         },{
          award: 'Turing Award',year: 2001,by: 'ACM'
         },{
          award: 'IEEE John von Neumann Medal',by: 'IEEE'
         }
        ]
   },{
    _id: 5,name: { first: 'Ole-Johan',last: 'Dahl' },birth: new Date('Oct 12,1931'),death: new Date('Jun 29,by: 'IEEE'
         }
        ]
   }
  ]
);
db.bios.insert(
  {
   name: { first: 'John',last: 'McCarthy' },birth: new Date('Sep 04,1927'),death: new Date('Dec 24,2011'),contribs: [ 'Lisp','Artificial Intelligence','ALGOL' ],awards: [
        {
         award: 'Turing Award',year: 1971,by: 'ACM'
        },{
         award: 'Kyoto Prize',year: 1988,by: 'Inamori Foundation'
        },{
         award: 'National Medal of Science',year: 1990,by: 'National Science Foundation'
        }
       ]
  }
)
c = db.bios.find( { name: { first: 'John',last: 'McCarthy' } } );
while((c.hasNext())) printjson(c.next())

=================================================

Mongo還有個save方法,這個方法同樣也是插入資料。咋一樣是一樣的,仔細想想如果是一樣的,那幹嘛不統一,於是想到了ORM模式中,資料的save方法中,如果要儲存的資料已存在,那麼它知道是修改這個資料,如果不存在則是新增。同樣,這裡save也是如此。

如果save方法帶了_id那麼,如果資料庫中存在了此_id的文件,那麼,會修改原有資料,如果沒有,則新增,所以,不帶_id的save方法和insert是一樣的,但是Insert方法如果插入的是相同的Id,那麼是不會插入的;

更新操作,傳統的資料庫更新操作,必須是更新的資料已經存在,要不然你想,你資料記錄都不在便要更新,這不扯淡嗎,但是,mongodb卻可以這樣,如果要更新的資料不存在,那麼便插入這文件資料;

更新語法:

db.collection.update(<query>,<update>,{ upsert: true } )

如果是更新具體某個,那麼帶_id的save方法同樣可以完成更新任務;

查詢可發現改變的資料:

>c =db.bios.find( { name: { first: 'update',last: 'update' } } );
>while((c.hasNext()))printjson(c.next())

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支援。如果你想了解更多相關內容請檢視下面相關連結