MongoDB 检查 id 是否是有效的 BSON PHP

Rus*_*ust 1 php mongodb

如何检查 MongoDB ID 是否是有效的 BSON?

这就是我现在所拥有的

public function findOne($id=""){
  if($BSON_id = new \MongoDB\BSON\ObjectId($id)){
    $user = $this->collection->findOne([
     '_id'=> new \MongoDB\BSON\ObjectId($id)
   ]);
   if(!$user){ return false; }
   return $user;
  }
}

(new User)->findOne("invalidBson123")
Run Code Online (Sandbox Code Playgroud)

然而,上面抛出了一个致命错误:

未捕获的 MongoDB\Driver\Exception\InvalidArgumentException:解析 ObjectId 字符串时出错

Ale*_*lex 6

http://php.net/manual/en/mongodb-bson-objectid.construct.php内容如下:

id(字符串)

24 个字符的十六进制字符串。如果未提供,驱动程序将生成一个 ObjectId。

所以检查可以是一个简单的正则表达式:

if(preg_match('/^[0-9a-f]{24}$/i', $id) === 1) {
.....
Run Code Online (Sandbox Code Playgroud)

或者,如果您更愿意坚持使用 ObjectId 构造函数并使其面向未来,请使用 try-catch 来实现:

try {
    $user = $this->collection->findOne([
     '_id'=> new \MongoDB\BSON\ObjectId($id)
   ]);
   if(!$user){ return false; }
   return $user;
} catch() {}
Run Code Online (Sandbox Code Playgroud)