如何$项目将ObjectId投影到mongodb聚合中的字符串值?

mat*_*tus 25 mongodb mongodb-query aggregation-framework

是否有一个我可以在聚合函数中使用的运算符来获取字符串而不是ObjectId作为响应?

db.something.aggregate([ {$match: {'property': {$exists:true}} }, {$project: {stringId: '$_id.???'}}])
Run Code Online (Sandbox Code Playgroud)

Ash*_*shh 23

Mongodb 4.0引入了$toString聚合运算符.那么,现在您可以轻松地将ObjectId转换为字符串

db.collection.aggregate([
  {
    $project: {
      _id: {
        $toString: "$_id"
      }
    }
  }
])
Run Code Online (Sandbox Code Playgroud)

反之亦然使用$toObjectId聚合

db.collection.aggregate([
  {
    $project: {
      _id: {
        $toObjectId: "$_id"
      }
    }
  }
])
Run Code Online (Sandbox Code Playgroud)

  • 在Mongodb 3.6版中如何? (7认同)
  • @查理不,你不能。您必须升级到4.0,而这正是新版本一直吸引的。 (3认同)

小智 9

聚合函数中没有Direct Operator来从ObjectId获取String.

版本2.6之后您可以使用ObjectId.toString()方法将ObjectId转换为字符串.首先匹配并投影您的ObjectID.然后,您可以使用将此对象ID转换为字符串ObjectID.toString().

db.something.aggregate([{"$match":{'property': {$exists:true}}},{"$project":{"_id":1}}]) 
Run Code Online (Sandbox Code Playgroud)

然后使用生成的Object并使用获取字符串作为响应 ObjectID.tostring()

编辑:您可以使用访问对象ID的str属性

ObjectId("507f191e810c19729de860ea").str
Run Code Online (Sandbox Code Playgroud)

来源:mongodb docs