JavaScript中如何将数组内ObjectId类型的_id转换为字符串?
解决MongoDB ObjectId转字符串的问题
错误原因
你用slice报错是因为x._id是MongoDB的ObjectId实例对象,不是原生字符串或数组,所以没有slice方法。
正确转换方法
下面几种方法都能把ObjectId转成对应的字符串:
1. 使用ObjectId自带的toString()方法
这是最直接的方式,MongoDB的ObjectId实例内置了toString()方法,会返回不带ObjectId(包裹的纯字符串:
const usersWithStringId = userFromDb.map(user => ({ ...user, _id: user._id.toString() }));
2. 使用valueOf()方法
valueOf()也会返回ObjectId的字符串值,效果和toString()一致:
const usersWithStringId = userFromDb.map(user => ({ ...user, _id: user._id.valueOf() }));
3. 用String()强制转换
通过原生String函数强制转换ObjectId实例,同样能得到目标字符串:
const usersWithStringId = userFromDb.map(user => ({ ...user, _id: String(user._id) }));
4. 解构时直接处理(ES6+)
如果需要提取字段并转换,可以在解构过程中直接处理_id:
const usersWithStringId = userFromDb.map(({ _id, ...rest }) => ({ ...rest, _id: _id.toString() }));
示例输出
原userFromDb示例:
[ { _id: ObjectId("60d21b4667d0d8992e610c85"), name: "Alice" }, { _id: ObjectId("60d21b4667d0d8992e610c86"), name: "Bob" } ]转换后输出:
[ { _id: "60d21b4667d0d8992e610c85", name: "Alice" }, { _id: "60d21b4667d0d8992e610c86", name: "Bob" } ]
内容的提问来源于stack exchange,提问作者Adi
相关产品推荐
相关产品推荐

