檢查一個欄位是否存在於 MongoDB 中

Tahseen Tauseef 2023年1月30日 2022年5月13日
  1. 資料庫中的欄位
  2. MongoDB 中的欄位
  3. 檢查欄位是否存在於 MongoDB 中
  4. 檢查欄位是否存在於 MongoDB 的集合中
  5. 檢查嵌入式欄位是否存在於 MongoDB 中
  6. 當 MongoDB 中不存在欄位時
檢查一個欄位是否存在於 MongoDB 中

這篇文章將告訴你資料庫中的所有欄位以及如何檢查它們是否存在。此外,你將瞭解如何檢查資料庫中是否存在嵌入欄位。

資料庫中的欄位

欄位是在表單、檔案或資料庫中儲存資料的物理結構。一個欄位中有一個或多個位元組。

資料記錄包括訂單號、姓名、地址、城市等。搜尋欄位搜尋框這兩個詞在網頁上經常互換使用。

對於資料庫搜尋,該欄位是公分母。例如,當執行資料庫查詢以查詢居住在某個國家/地區的所有客戶時,將使用 STATE 列。

ORDER AMOUNT 欄位在彙總交易時進行總計。在尋找特定員工時,使用 JOB TITLE

MongoDB 中的欄位

在 MongoDB 中,儲存在集合中的每個文件都需要一個唯一的 _id 欄位作為主鍵。如果插入的文件省略了 _id 欄位,MongoDB 驅動程式會自動為 _id 欄位生成一個 ObjectId

檢查欄位是否存在於 MongoDB 中

MongoDB 中的 $exists 運算子可用於驗證給定集合中是否存在欄位。當 $exists 運算子的值設定為 true 時,它匹配包含所提供欄位的文件(包括該欄位值為空的文件)。

$exists 運算子的值為 false 時,此運算子僅返回不包含給定欄位的文件。

語法:

{ field: { $exists: <boolean> } }

<boolean>true 時,$exists 匹配包含該欄位的文件,包括欄位值為 null 的文件。如果 <boolean>false,則查詢僅返回不包含該欄位的文件。

MongoDB $exists 不對應 SQL 運算子 exists。對於 SQL exists,使用 $in 運算子。

$in 運算子查詢欄位值等於所提供陣列中的任何值的文件。使用以下原型來提供 $in 表示式。

{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }

在 MongoDB 中,你可以使用以下方法來檢視某個欄位是否存在於集合中。

檢查欄位是否存在於 MongoDB 的集合中

db.data.find({ "myField": { $exists: true } })

此方法確定 myField 是否存在於 data 集合中。如果是,則返回包含欄位名稱的所有文件。如果沒有,它什麼也不返回。

例子:

db={
  "data": [
    {
      "_id": ObjectId("611a99100a3322fc1bd8c38b"),
      "fname": "Tom",
      "city": "United States of America",
      "StudentHobby": [
        "c#",
        "asp",
        "gaming"
      ]
    },
    {
      "_id": ObjectId("611a99340a3322fc1bd8c38c"),
      "fname": "Harry",
      "city": "Canada",
      "courses": [
        "python",
        "asp",
        "node"
      ]
    },
    {
      "_id": ObjectId("611a99510a3322fc1bd8c38d"),
      "fname": "Mikky",
      "city": "New Zealand",
      "courses": [
        "python",
        "asp",
        "c++"
      ]
    },
    {
      "_id": ObjectId("611b3e88a60b5002406571c3"),
      "fname": "Ron",
      "city": "United Kingdom",
      "courses": [
        "python",
        "django",
        "node"
      ]
    }
  ]
}

資料庫配置如上;檢查欄位 StudentHobby 是否存在的查詢是:

db.data.find({ 'StudentHobby' : { '$exists' : true }})

為上述查詢附加了此連結。你可以根據需要訪問執行並使用程式碼。

此查詢的結果顯示在下面的螢幕截圖中。

欄位存在

檢查嵌入式欄位是否存在於 MongoDB 中

db.data.find({ "myField.embeddedField": { $exists: true } })

此方法確定欄位 myField 中的欄位 embeddedField 是否存在於 data 集合中。

如果是,則返回包含欄位名稱的所有文件。如果沒有,它什麼也不返回。

上面查詢的資料庫配置是:

db.teams.insertOne({team: "Mavs", class: {conf:"Western", div:"A"}, points: 31})
db.teams.insertOne({team: "Spurs", class: {conf:"Western", div:"A"}, points: 22})
db.teams.insertOne({team: "Jazz", class: {conf:"Western", div:"B"}, points: 19})
db.teams.insertOne({team: "Celtics", class: {conf:"Eastern", div:"C"}, points: 26})

下面的程式碼將顯示嵌入欄位名稱 div 是否存在於 teams 集合中的欄位 class 中。

db.teams.find({ "class.div": { $exists: true } })

此查詢的結果顯示在下面的螢幕截圖中。

欄位存在 2

由於嵌入欄位名稱 div 存在於 class 欄位中,所以返回包含 div 嵌入欄位的每個文件。

當 MongoDB 中不存在欄位時

db={
  "data": [
    {
      "_id": ObjectId("611a99100a3322fc1bd8c38b"),
      "fname": "Tom",
      "city": "United States of America",
      "StudentHobby": [
        "c#",
        "asp",
        "gaming"
      ]
    },
    {
      "_id": ObjectId("611a99340a3322fc1bd8c38c"),
      "fname": "Harry",
      "city": "Canada",
      "courses": [
        "python",
        "asp",
        "node"
      ]
    },
    {
      "_id": ObjectId("611a99510a3322fc1bd8c38d"),
      "fname": "Mikky",
      "city": "New Zealand",
      "courses": [
        "python",
        "asp",
        "c++"
      ]
    },
    {
      "_id": ObjectId("611b3e88a60b5002406571c3"),
      "fname": "Ron",
      "city": "United Kingdom",
      "courses": [
        "python",
        "django",
        "node"
      ]
    }
  ]
}

如果該欄位不存在,你將不會得到任何東西。

db.data.find({ 'StudentTechnicalSubject' : { '$exists' : true }})

訪問此連結以檢視不存在 StudentTechnicalSubject 的工作。將顯示以下結果。

no document found

任何資料庫管理系統的查詢功能對於獲取資料都是至關重要的。由於大型企業的資料庫包含複雜的資料型別,他們更喜歡使用查詢來及時訪問所需的資料。

運算子是每個查詢的重要組成部分;本教程中練習了 MongoDB 的 $exists 運算子。你可以使用此運算子來驗證文件中的可用欄位並獲取不包含請求欄位的論文。

上面提到的 $exists 運算子的功能由可以傳遞的布林值支援。