Mongo聚合中将_id转为字符串时如何保留所有字段?
解决MongoDB聚合中转换_id为字符串后丢失其他字段的问题
因为$project阶段默认只会保留你明确指定的字段,所以只定义_id的转换规则时,其他字段都会被过滤掉。以下两种方法可以解决这个问题:
方式一:显式保留需要的字段
如果需要保留的字段数量不多,直接在$project里把这些字段都声明为1,同时转换_id:
{ "$project": { "_id": { "$toString": "$_id" }, "name": 1, "age": 1, // 列出所有需要保留的其他字段 } }
方式二:用$set替换$project(推荐)
从MongoDB 4.2版本开始,使用$set阶段可以直接修改_id为字符串,该阶段会自动保留所有原有字段,无需逐个声明:
{ "$set": { "_id": { "$toString": "$_id" } } }
如果你的MongoDB版本低于4.2,也可以通过$addFields结合$rename实现:
[ { "$addFields": { "str_id": { "$toString": "$_id" } } }, { "$project": { "_id": 0, "str_id": 1, "name": 1, "age": 1 } }, { "$rename": { "str_id": "_id" } } ]
内容的提问来源于stack exchange,提问作者Zesshi
相关产品推荐
相关产品推荐

