【发布时间】:2021-05-02 17:07:54
【问题描述】:
我想将 MongoDB 自动生成的 _id 字段重命名为“ObjectID”。即,改变对象,使_id: xxxxx 变为ObjectID: xxxxx。这是我的对象的架构:
{
skills: [ 'Programming', 'Design' ],
paymentForms: [ 'Flat fee' ],
_id: 6011a89084e07663d25e01af,
title: 'Personal website development',
description: 'I would like to have a personal website that showcases my resume and work portfolio.',
otherSkills: '',
price: '25-50',
__v: 0
}
目前,我正在使用 mongoose 查询获取数据库中的文档,该查询返回文档数组。到目前为止,我已经尝试了两种方法——在获取此文档后,我映射每个元素并重命名 _id 键,但是,这两个函数都不起作用。代码如下:
function renameKey(obj, oldKey, newKey) {
if (oldKey !== newKey) {
console.log(Object.getOwnPropertyDescriptor(obj, oldKey))
Object.defineProperty(obj, newKey,
Object.getOwnPropertyDescriptor(obj, oldKey));
delete obj[oldKey];
}
}
此方法的问题是“getOwnPropertyDescriptor”返回未定义。我尝试的第二种方法是:
const renameKey = (obj, oldKey, newKey) => {
const targetKey = obj[oldKey];
console.log(targetKey);
obj[newKey] = targetKey;
console.log(obj);
delete obj[oldKey];
return obj;
}
这可能是重命名键的典型方法。但它不会改变我的对象,并返回相同的对象。在这两种情况下,这些方法都适用于我创建的文字对象,例如 { _id: 10 },但是,它不适用于从我的 mongoose 查询返回的对象。
谁能告诉我这些方法有什么问题,或者提供解决这个问题的替代方法,例如使用猫鼬投影重命名查询(如果可能的话,idk)?
【问题讨论】:
标签: javascript mongodb mongoose