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

时间:2016-03-17 12:00:48

标签: mongodb mongodb-query aggregation-framework

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

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

3 个答案:

答案 0 :(得分:16)

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

db.collection.aggregate([
  {
    $project: {
      _id: {
        $toString: "$_id"
      }
    }
  }
])

反之亦然,使用$toObjectId聚合

db.collection.aggregate([
  {
    $project: {
      _id: {
        $toObjectId: "$_id"
      }
    }
  }
])

答案 1 :(得分:8)

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

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

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

然后使用生成的Object并使用ObjectID.tostring()

将字符串作为响应

编辑:您可以使用

访问对象ID的str属性

ObjectId("507f191e810c19729de860ea").str

来源:mongodb docs

答案 2 :(得分:-13)

您可以使用$concat运算符进行内联:

db.something.aggregate(
    [
        { $match :
            { 'property' :
                { $exists:true }
            }
        },
        { $project:
            { stringId:
                { $concat: [ ObjectId().str ] }
            }
        }
    ]
)