文字列を BSON に変換して MongoDB 検索を実行しています。変換を実行する前に、文字列が Mongo の有効な ObjectID であるかどうかを確認する方法はありますか?
これは、現在の findByID 関数のコーヒー スクリプトです。うまく機能しますが、文字列が ID ではないと判断した場合は、別の属性で検索したいと思います。
db.collection "pages", (err, collection) ->
collection.findOne
_id: new BSON.ObjectID(id)
, (err, item) ->
if item
res.send item
else
res.send 404
ベストアンサー1
mongoose ObjectId バリデータは有効な objectId を検証するのに機能することがわかりましたが、無効な ID が有効とみなされるケースがいくつかありました。(例: 12 文字の任意の文字列)
var ObjectId = require('mongoose').Types.ObjectId;
ObjectId.isValid('microsoft123'); //true
ObjectId.isValid('timtomtamted'); //true
ObjectId.isValid('551137c2f9e1fac808a5f572'); //true
私の場合、文字列を objectId にキャストし、元の文字列が objectId の文字列値と一致するかどうかを確認することでうまくいきました。
new ObjectId('timtamtomted'); //616273656e6365576f726b73
new ObjectId('537eed02ed345b2e039652d2') //537eed02ed345b2e039652d2
これが機能するのは、有効な ID は ObjectId にキャストされても変更されないが、無効な有効性を取得する文字列は objectId にキャストされると変更されるためです。