能否仅用MongoDB的find查询将_id以字符串而非ObjectId返回?
能否通过简单find查询让MongoDB返回字符串格式的_id?
很遗憾,仅靠简单的find查询是没办法直接让MongoDB返回字符串格式的_id的。
原因解释
MongoDB里的_id默认是ObjectId类型,find的投影(projection)逻辑只能选择返回整个字段或者排除它,没办法直接提取ObjectId的字符串表示。你尝试的"_id.str"或"_id.value"写法之所以无效,是因为投影操作只支持针对嵌套文档的字段选择,而ObjectId是MongoDB的内置特殊类型,不是普通的嵌套文档,不存在这样的可投影属性。
替代方案(虽不符合你"仅用简单find"的要求,但可参考)
如果一定要在数据库层面完成转换,目前最直接的方式是用聚合管道结合$toString操作符:
db.getCollection('contact').aggregate([ { $match: {"xx": "yy"} }, { $project: { _id: { $toString: "$_id" } } } ])
另外,也可以在拿到find查询的结果后,在客户端把ObjectId转成字符串(比如在Node.js里用doc._id.toString()),这种方式在数据量不大时也很便捷,还能避免数据库层面的额外计算开销。
总结
如果你的核心需求就是完全依赖简单find查询、不做任何额外处理,那确实没有可行的方法——只能接受返回ObjectId类型的结果,再自行转换。
内容的提问来源于stack exchange,提问作者trf
相关产品推荐
相关产品推荐

