首頁 > 軟體

使用MongoDB操作檔案

2022-03-07 19:08:11

本篇文章中將講解如何使用MongoDB操作檔案。

檔案的資料結構和JSON基本一致,所有儲存在集合中的資料都是BSON格式。BSON是一種類似json格式的一種二進位制形式的儲存格式,簡稱Binary JSON。

一、插入檔案

MongoDB使用insert()或save()方法向集合中插入檔案,語法如下:

db.COLLECTION_NAME.insert(document)

例如:以下檔案可以儲存在MongoDB的test資料庫的MongoDBTest集合中:

{"title" : "MongoDB", "description" : "mongoDB是一個NoSql資料庫", "tags" : "NoSql" }

1、使用insert()方法插入檔案

在上面的例子中,MongoDBTest是我們的集合名,如果該集合不在該資料庫中,MongoDB會自動建立該集合並插入檔案。doc是定義的變數,可以以變數的形式插入集合。

檢視已經插入的檔案:

> db.MongoDBTest.insert(doc)
WriteResult({ "nInserted" : 1 })
> db.MongoDBTest.find()
{ "_id" : ObjectId("5a6f13e72d0b37669c5d2a78"), "title" : "MongoDB", "description" : "mongoDB是一個NoSql資料庫", "tags" : "NoSql" }
>

2、使用save()方法插入檔案

插入檔案也可以使用save()方法。如果不知道_id欄位save()方法類似於insert()方法。如果指定_id欄位,則會更新該_id的資料。

下面的例子表示使用save()命令更新資料:

二、查詢檔案

MongoDB查詢檔案使用find()方法。

find()方法以非結構化的方式來顯示所有檔案。

1、語法

MongoDB查詢資料的語法格式如下:

db.collection.find(query,projection)

引數說明:

  • query:可選引數,使用查詢操作符指定查詢條件。
  • projection:可選引數,使用投影操作符指定返回的鍵。如果查詢時要返回檔案中所有鍵值,只需省略該引數即可(預設省略)。

如果你需要格式化讀取的資料,可以使用pretty()方法,語法格式如下:

db.collection.find().pretty()

pretty()方法以格式化的方式來顯示所有檔案。

2、範例

例如:查詢Student集合中的所有檔案。

除了find()方法之外,還有一個findOne()方法,它只返回一個檔案。

MongoDB與RDBMS where語句比較

如果你熟悉常規的SQL資料,通過下表可以更好的理解MongoDB的條件語句查詢:

操作格式範例RDBMS中的類似語句
等於{<key>:<value>}db.Student.find({"name":"張三"}).pretty()where name='張三'
小於{<key>:{$lt:<value>}}db.Student.find({"score":{$lt:"80"}}).pretty()where score<80
小於或等於{<key>:{$lte:<value>}}db.Student.find({"score":{$lte:"80"}}).pretty()where score<=80
大於{<key>:{$gt:<value>}}db.Student.find({"score":{$gt:"80"}}).pretty()where score>80
大於或等於{<key>:{$gte:<value>}}db.Student.find({"score":{$gte:"80"}}).pretty()where score>=80
不等於{<key>:{$ne:<value>}}db.Student.find({"score":{$ne:"80"}}).pretty()where score!=80

(1)查詢name是張三的學生

db.Student.find({"name":"張三"}).pretty()

查詢結果如下圖所示:

(2)查詢成績小於80的學生

db.Student.find({"score":{$lt:"80"}}).pretty()

查詢結果如下圖所示:

(3)查詢成績小於等於80的學生

db.Student.find({"score":{$lte:"80"}}).pretty()

查詢結果如下圖所示:

(4)查詢成績大於80分的學生

db.Student.find({"score":{$gt:"80"}}).pretty()

(5)查詢成績大於等於80分的學生

db.Student.find({"score":{$gte:"80"}}).pretty()

查詢結果如下圖所示:

(6)查詢成績不等於80分的學生

db.Student.find({"score":{$ne:"80"}}).pretty()

查詢結果如下圖所示:

3、MongoDB AND條件查詢

MongoDB的find()方法可以傳入多個鍵(key),每個鍵(key)以逗號分隔開,等價於常規SQL的AND條件。

語法格式如下:

db.collection.find({key1:value1,key2:value2}).pretty()

例如:查詢姓名為張三並且課程是C#程式設計的學生資訊。

db.Student.find({"name":"張三","subject":"C#程式設計"}).pretty()

查詢結果如下圖所示:

以上範例中類似於RDBMS中的where語句:WHERE name='張三' AND subject='C#程式設計'。

4、MongoDB OR 條件查詢

MongoDB的OR條件語句使用了關鍵字$or,語法格式如下:

>db.collection.find(
  {
    $or:[
           {key1:value1},{key2:value2}
        ]
   }
)

例如:查詢姓名是李四或者成績等於80的學生

db.Student.find({$or:[{"name":"李四"},{"score":"80"}]}).pretty()

查詢結果如下圖所示:

三、更新檔案

MongoDB使用update()和save()方法來更新集合中的檔案。接下來讓我們詳細來看下兩個方法的應用及其區別。

1、update()方法

update()方法用於更新已經存在的檔案。語法格式如下:

db.collection.update(
  <query>,
  <update>,
 {
   upsert:<boolean>,
   multi:<boolean>,
   writeConcern:<document>
  }
)

引數說明:

  • query:update的查詢條件,類似sql update查詢內where後面的條件。
  • update:update的物件和一些更新的操作符(如$set,Sinc......)等,也可以理解為sql update查詢內set後面的。
  • upsert:可選引數,這個引數的意思是:如果不存在update的記錄,是否插入新的檔案。如果為true則插入,預設是false不插入。
  • multi:可選引數,MongoDB預設是false,只更新找到的第一條記錄。如果這個引數為true,就把按條件查詢出來的多條記錄全部更新。
  • writeConcern:可選引數,丟擲異常的級別。

writeConcern的幾種丟擲異常的級別引數

  • writeConcern.NONE:沒有異常丟擲。
  • writeConcern.NORMAL:僅丟擲網路錯誤異常,沒有伺服器錯誤異常丟擲。
  • writeConcern.SAFE:丟擲網路錯誤異常、伺服器錯誤異常;並等待伺服器完成寫操作。
  • writeConcern.MAJORITY:丟擲網路錯誤異常、伺服器錯誤異常;並等待一個主伺服器完成寫操作。
  • writeConcern.FSYNC_SAFE:丟擲網路錯誤異常、伺服器錯誤異常;寫操作等待伺服器將資料重新整理到磁碟。
  • writeConcern.JOURNAL_SAFE:丟擲網路錯誤異常、伺服器錯誤異常;寫操作等待伺服器提交到磁碟的紀錄檔檔案。
  • writeConcern.REPLICAS_SAFE:丟擲網路錯誤異常、伺服器錯誤異常;等待至少2臺伺服器完成寫操作。

例如:使用update()方法更新標題(title)

上面的語句只會更新第一條查詢到的檔案,如果你要更新多條相同的檔案,則需要設定multi引數為true。

如果要更新的資料不存在,upsert引數設定為true則會插入資料。

2、save()方法

save()方法通過傳入的檔案來替換已有檔案,語法格式如下:

db.collection.save(
  <document>,
  {
    writeConcern:<document>
  }
)

引數說明:

  • document:要更新的檔案資料。
  • writeConcern:可選引數,丟擲異常的級別。

例如:更新_id=5a702a7f2c6ed8f4d3491831的檔案。

四、刪除檔案

MongoDB使用remove()方法來移除集合中的資料。

注意:在執行remove()方法前先執行find()命令來判斷執行的條件是否正確,這是一個比較好的習慣。

remove()方法的基本語法格式如下:

db.collection.remove(
  <query>,
  <justOne>
)

如果MongoDB是2.6版本以後的,語法格式如下:

db.collection.remove(
  <query>,
  {
    justOne:<boolean>,
    writeConcern:<document>
   }
)

引數說明:

  • query:可選引數,刪除檔案的條件。
  • justOne:可選引數,如果設為true或1,則只刪除一個檔案。
  • writeConcern:可選引數,丟擲異常的級別。

範例

1、刪除title為MongoDB教學的檔案,只刪除一個:

2、刪除所有資料

如果想刪除所有資料,可以使用下面的例子

到此這篇關於使用MongoDB操作檔案的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com