【发布时间】:2016-07-03 18:25:36
【问题描述】:
我可以在 aggregate 函数中使用一个运算符来获取字符串而不是 ObjectId 作为响应吗?
db.something.aggregate([
{ "$match": { "property": { "$exists": true } } },
{ "$project": { "stringId": "$_id.???" } }
])
【问题讨论】:
-
不,没有。聚合框架不会重新转换任何数据类型(除了通过
$substr将数字字符串转换为 Date 或 Date 转换为 numeric 基本上可以使用诡计)。为什么你会认为这是必要的?在大多数语言中,将ObjectId值写为字符串相当简单。 -
@BlakesSeven 总是有原因的 :) 因为简单。当然也可以后期处理。但是,如果我可以将结果传递给其他需要纯字符串的服务/方,那就太好了。 ...
-
就像我说的,对于大多数语言,BSON 只是转换为本地类型。对于“大多数”语言,简单地输出为字符串根本不需要任何工作。就我个人而言,我更喜欢扩展的 JSON 输出形式,即
{ "$oid": "56ea9e8bb1e015d13b376db5" },因为至少这让远程客户端知道数据确实是ObjectId,因此它可以自己正确解析和转换。这是一件好事,尤其是考虑到存储空间是字符串长度的 一半。
标签: mongodb mongodb-query aggregation-framework