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

时间:2018-03-15 11:22:17

标签: 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")

然而,上述情况引发致命错误:

  

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

2 个答案:

答案 0 :(得分:2)

http://php.net/manual/en/mongodb-bson-objectid.construct.php读到:

  

id(string)

     

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

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

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

或者,如果你更喜欢坚持使用ObjectId构造函数并使其面向未来,请使用try-catch:

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

答案 1 :(得分:1)

感谢@Alex指出MongoDB ObjectId是一个24个字符的十六进制字符串。

所以,现在我所要做的就是检查它是否是十六进制,其长度是24。

if(strlen($id) == "24" && ctype_xdigit($id)){
  // Its a valid BSON
  // Do your thing
}