使用针对ObjectId的正则表达式查询MongoDB

Luí*_*res 6 regex mongodb

是否可以进行如下查询:

db.artigo.find( { _id : ObjectId('520a504a3004bc615fcfcf16') } )
Run Code Online (Sandbox Code Playgroud)

但在ObjectId上使用正则表达式?

例如,在上面的位置上获取包含"004"的_ids.

PS.原因是基于某些字段实现了一个简短的服务,即_id.我正在尝试创建一个隐式的"shorty"服务而不是一个明确的服务(为此目的生成一个字段).

Far*_*lik 6

ObjectId不是字符串,而是MongoDB中的特殊类型。您无法使用正则表达式运算符对包含 ObjectId 的字段进行查询。

_id不一定是ObjectId,所以我建议提供您自己的唯一字符串作为_id,然后您可以使用正则 表达式进行查询。

例子:

let userId = 'bf44fa';

const result = await Users.aggregate([
  {
    $addFields: {
      tempUserId: { $toString: '$_id' },
    }
  },
  {
    $match: {
      tempUserId: { $regex: userId, $options: "i" }
    }
  }
]).exec();
Run Code Online (Sandbox Code Playgroud)

现在我们可以根据_id的最后6位数字或开始6位数字根据您的意愿使用聚合来查找。


nic*_*lon 5

  • ObjectId 不是字符串,而是 MongoDB 中的特殊类型。您无法
    使用正则表达式运算符对包含 ObjectId 的字段进行查询。
  • 但是... _id 不一定是 ObjectId,所以我建议提供您自己的唯一字符串作为 _id,然后您可以使用正则表达式
    进行查询。