我是否可以在聚合函数中使用运算符来获取字符串而不是ObjectId作为响应?
db.something.aggregate([ {$match: {'property': {$exists:true}} }, {$project: {stringId: '$_id.???'}}])
答案 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 ] }
}
}
]
)