Can I determine if a string is a MongoDB ObjectID?

前端 未结 16 673
时光说笑
时光说笑 2020-11-30 00:31

I am doing MongoDB lookups by converting a string to BSON. Is there a way for me to determine if the string I have is a valid ObjectID for Mongo before doing the conversion?

16条回答
  •  迷失自我
    2020-11-30 00:44

    In the solution answer Andy Macleod said:

    What has been working for me is casting a string to an objectId and then checking that the original string matches the string value of the objectId.

    new ObjectId('timtamtomted'); //616273656e6365576f726b73
    new ObjectId('537eed02ed345b2e039652d2') //537eed02ed345b2e039652d2
    

    This work because valid ids do not change when casted to an ObjectId but a string that gets a false valid will change when casted to an objectId.

    An implementation of this approach, would be a function that checks if the passed value is a valid ObjectId and works with both string and ObjectId (object) values. It would look something like this:

    var ObjectId = require("mongoose");.Types.ObjectId;
    
    function isValidObjectId(value) {
      // If value is an object (ObjectId) cast it to a string
      var valueString = typeof value === "string" ? value : String(value); 
    
      // Cast the string to ObjectId
      var idInstance = new ObjectId(valueString); 
    
      return String(idInstance) === valueString;
    }
    

提交回复
热议问题