新聞中心
$jsonSchema操作符來驗證文檔。需要定義一個JSON模式,然后使用$jsonSchema操作符將其應用于查詢。,,“javascript,db.collection.insertOne({, "name": "John",, "age": 30,, "email": "[email protected]",}, {, $jsonSchema: {, bsonType: "object",, required: ["name", "age"],, properties: {, name: {, bsonType: "string",, description: "must be a string and is required", },, age: {, bsonType: "int",, minimum: 18,, maximum: 120,, description: "must be an integer in [18, 120] and is required", },, email: {, bsonType: "string",, pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$",, description: "must be a string and match the regular expression pattern", }, }, },}),“,,這段代碼將在插入文檔時進行驗證,確保滿足JSON模式中定義的規(guī)則。如果不滿足規(guī)則,將拋出異常。MongoDB的文檔驗證功能是一種確保數據完整性和一致性的重要工具,通過使用文檔驗證,可以在插入或更新文檔時對數據進行驗證,以確保其符合預定義的規(guī)則和約束條件,下面是關于如何使用MongoDB的文檔驗證功能的詳細指南。

啟用文檔驗證
要啟用文檔驗證,您需要在集合級別上創(chuàng)建一個驗證規(guī)則,驗證規(guī)則定義了文檔中必須存在的字段、字段的數據類型以及字段的取值范圍等約束條件,以下是一個示例:
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "email"],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
email: {
bsonType: "string",
pattern: "^[azAZ09._%+]+@[azAZ09.]+.[azAZ]{2,}$",
description: "must be a string and match the regular expression pattern"
}
}
}
}
})
上述代碼創(chuàng)建了一個名為"users"的集合,并定義了一個驗證規(guī)則,該規(guī)則要求每個文檔都必須包含"name"和"email"字段,quot;name"字段必須是字符串類型,"email"字段必須是符合特定正則表達式模式的字符串。
插入和更新文檔
當您嘗試插入或更新文檔時,MongoDB將根據驗證規(guī)則對文檔進行驗證,如果文檔符合規(guī)則,則可以成功插入或更新;否則,操作將失敗并返回錯誤信息,以下是一個插入文檔的示例:
db.users.insertOne({
name: "John Doe",
email: "[email protected]"
})
上述代碼嘗試向"users"集合中插入一個文檔,該文檔包含了"name"和"email"字段,并且它們的值滿足驗證規(guī)則的要求,插入操作將成功執(zhí)行。
處理驗證錯誤
如果文檔不符合驗證規(guī)則,MongoDB將返回一個包含錯誤信息的文檔,您可以根據需要處理這些錯誤信息,例如記錄日志或通知用戶,以下是一個處理驗證錯誤的示例:
try {
db.users.insertOne({
name: 123,
email: "invalid_email"
})
} catch (error) {
console.log(error.message)
}
上述代碼嘗試插入一個不符合驗證規(guī)則的文檔,因為"name"字段的值不是字符串類型,由于插入操作將失敗,所以會捕獲到一個錯誤對象,并將其錯誤信息打印到控制臺。
相關問題與解答
以下是兩個與本文相關的問題及其解答:
問題1:如果我想在集合中禁用文檔驗證功能,該怎么辦?
答:要禁用文檔驗證功能,可以使用drop()方法刪除集合的驗證規(guī)則,運行db.collectionName.drop()將刪除指定集合的驗證規(guī)則,請注意,這將永久刪除集合及其所有數據。
問題2:是否可以在已經存在數據的集合上添加文檔驗證規(guī)則?
答:是的,您可以在已經存在數據的集合上添加文檔驗證規(guī)則,請注意,已存在的文檔可能不符合新的驗證規(guī)則,在這種情況下,您需要手動修復或刪除不符合規(guī)則的文檔。
網頁標題:MongoDB的文檔驗證功能怎么用
網頁路徑:http://fisionsoft.com.cn/article/cdiejdg.html


咨詢
建站咨詢
