如何在 Node.js 中检查字符串是否是有效的 MongoDB ObjectId?
MongoDB ObjectId: MongoDB 使用各个对象创建的时间戳为每个对象创建一个唯一的 12 字节 ID。
此 ObjectId 可用于唯一定位数据库中的特定对象。
看起来像这样, 507f191e810c19729de860ea 在本文中,我们将学习如何检查字符串是否为有效的 MongoDB ObjectId。 例子: 先决条件: Mongoose和 MongoDB 在 ObjectId 中提供了一个非常有用的函数,即ObjectId.isValid(“some_id”)来验证字符串是否具有正确的 MongoDB ID。 从 mongodb 或mongoose包中导入 ObjectId: 使用Mongoose: 但是,即使对于长度为 12 的无效字符串,它ObjectId.isValid(id)也会返回 true。 为了防止这种情况,可以在默认验证器之后添加另一个检查,该检查将根据条件返回 true 或 false,(从字符串创建的新 ObjectId )强制转换为字符串 === 字符串 可以按如下方式创建一个函数来检查字符串是否为有效的 ObjectId: 输出:
在正常的后端工作流程中,可能会根据一些计算或用户操作接收 ObjectId。这些可能会导致无效的 ObjectId 并且使用错误的 ObjectId 查询数据库会产生异常,然后稍后处理。594ced02ed345b2b049222c5 --> Valid MongoDB ObjectId
geeks --> Invalid MongoDB ObjectId
ObjectId 可以从 native 导入 mongodb和mongoose 包裹。const ObjectId = require('mongodb').ObjectId;
or
const mongodb, {ObjectId} = require('mongodb');
const ObjectId = require('mongoose').Types.ObjectId;
or
const mongoose = require('mongoose');
ObjectId = mongoose.Types.ObjectId;Id;
例如 :String ID ObjectId.isValid(id) Expected Validation 594ced02ed345b2b049222c5 true true geeks false false toptoptoptop true X false geeksfogeeks true X false
即(String)(new ObjectId(id)) === idconst ObjectId = require('mongoose').Types.ObjectId;
function isValidObjectId(id){
if(ObjectId.isValid(id)){
if((String)(new ObjectId(id)) === id)
return true;
return false;
}
return false;
}
Javascript
// Requiring ObjectId from mongoose npm package
const ObjectId = require('mongoose').Types.ObjectId;
// Validator function
function isValidObjectId(id){
if(ObjectId.isValid(id)){
if((String)(new ObjectId(id)) === id)
return true;
return false;
}
return false;
}
// Loading testcases into array
const testStrings = [ "594ced02ed345b2b049222c5","geeks",
"toptoptoptop","geeksfogeeks"];
// Validating each test case
for(const testcase of testStrings){
if(isValidObjectId(testcase))
console.log(testcase + " is a valid MongodbID");
else
console.log(testcase + " is not a valid MongodbID");
}
该函数的结果是: String ID isValidObjectId(id) Expected Validation 594ced02ed345b2b049222c5 true true geeks false false toptoptoptop false false geeksfogeeks false false