在聚合函数中是否有一种操作符可以用于获取字符串而不是ObjectId作为响应?
db.something.aggregate([
{ "$match": { "property": { "$exists": true } } },
{ "$project": { "stringId": "$_id.???" } }
])
在聚合函数中是否有一种操作符可以用于获取字符串而不是ObjectId作为响应?
db.something.aggregate([
{ "$match": { "property": { "$exists": true } } },
{ "$project": { "stringId": "$_id.???" } }
])
Mongodb 4.0 推出了$toString
聚合操作符。现在,您可以轻松地将ObjectId转换为字符串。
db.collection.aggregate([
{
$project: {
_id: {
$toString: "$_id"
}
}
}
])
或者使用$toObjectId
聚合函数来实现反之亦然。
db.collection.aggregate([
{
$project: {
_id: {
$toObjectId: "$_id"
}
}
}
])
聚合函数中没有直接的运算符可以从ObjectId获取字符串。
在2.6版本之后,您可以使用ObjectId.toString()
方法将您的ObjectId转换为字符串。首先,您匹配和投影您的ObjectId。然后,您可以使用ObjectID.toString()
将此对象ID转换为字符串。
db.something.aggregate([{"$match":{'property': {$exists:true}}},{"$project":{"_id":1}}])
接着使用生成的对象,并使用ObjectID.tostring()
来获取字符串作为响应。
编辑:您可以使用str
属性访问对象ID。
ObjectId("507f191e810c19729de860ea").str
来源:mongodb 文档
您可以使用$concat
运算符来进行内联操作:
db.something.aggregate(
[
{ $match :
{ 'property' :
{ $exists:true }
}
},
{ $project:
{ stringId:
{ $concat: [ ObjectId().str ] }
}
}
]
)
$substr
从数字转换为字符串,以及从数字转换为日期或日期转换为数字可以通过一些技巧实现)。你为什么认为需要这样做呢?在大多数编程语言中,将ObjectId
值写成字符串非常简单。 - Blakes Seven{ "$oid": "56ea9e8bb1e015d13b376db5" }
,因为这样远程客户端就知道数据确实是一个ObjectId
,所以它可以自己解析和转换。这是一件好事,特别是考虑到存储只有字符串长度的一半。 - Blakes Seven