javascript - 我可以确定一个字符串是否是 MongoDB ObjectID 吗?

我正在通过将字符串转换为 BSON 来进行 MongoDB 查找。在进行转换之前,我有没有办法确定我拥有的字符串是否是 Mongo 的有效 ObjectID?

这是我当前的 findByID 函数的 CoffeeScript 。它很好用,但如果我确定字符串不是 ID,我想通过不同的属性进行查找。

db.collection "pages", (err, collection) ->
  collection.findOne
    _id: new BSON.ObjectID(id)
  , (err, item) ->
    if item
      res.send item
    else
      res.send 404

最佳答案

我发现 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 时不会更改,但如果字符串为 false 有效,则会在转换为 objectId 时发生更改。

https://stackoverflow.com/questions/13850819/

相关文章:

python - 如何从 pymongo 发出 "show dbs"

c# - .NET MongoDB 连接的最佳实践?

mongodb - 在 MongoDB 中传递给 $in 查询的最大参数数是多少?

MongoDB 通过 Mongoose JS - findByID 是什么?

javascript - 如何使用对象 ID 数组创建 Mongoose 模式?

mongodb - MongoDB stats() 函数是否返回位或字节?

sql - MongoDB如何避免SQL注入(inject)困惑?

mongodb - 查询 bool 字段为 "not true"(例如,错误或不存在)

mongodb - 如何在 Mongoose 中查询不同的值?

mongodb - mongoDB中的字符串字段值长度