Node.js 如何转换mongoose.find()文档

Node.js 如何转换mongoose.find()文档,node.js,mongoose,Node.js,Mongoose,这是我的node.js mongoose查询。find查询选择三个属性:_id、userName和isManager。 在发送响应之前,我需要将“_id”键的名称更改为“empId”。我该怎么做 exports.getEmployeeUserNames = (req, res, next) => { Employee.find({ 'userName': { '$nin': [null, ""] }}) .sort('fName') .select(

这是我的node.js mongoose查询。find查询选择三个属性:_id、userName和isManager。 在发送响应之前,我需要将“_id”键的名称更改为“empId”。我该怎么做

exports.getEmployeeUserNames = (req, res, next) => {
  Employee.find({ 'userName': { '$nin': [null, ""] }})
    .sort('fName')
    .select('_id userName isManager')
    .then( documents => {

      // NEED TO CHANGE THE _id to empId
      // the res documents shd have structure { empId:..., userName:..., isManager:...}

      res.status(200).json(documents);
    })
    .catch(err => {
      res.status(500).json({
        message: "Server Error in fetching Employee data!"
      });
    });
}

为此,您必须将
\u id
值分配给
empId
,然后删除
\u id

试一试

另一种解决方案(Nikita Mazur的评论)


为此,您必须将
\u id
值分配给
empId
,然后删除
\u id

试一试

另一种解决方案(Nikita Mazur的评论)


注释代码是为了更好地理解每条语句中发生的事情

//
//方法1:修改实际对象
//
常数arr=[{
_身份证号码:1
},
{
_身份证号码:2
},
{
_身份证号码:3
},
]
const result=arr.map(x=>{
//在同一对象中创建新特性
//并为其指定所需的值
x、 empId=x.\u id;
//从对象中删除_id属性
删除x.。_id;
//归还物品;
返回x;
});
log('方法1:Result:',Result)//所需结果
log('Approach 1:Arr:',Arr)//原始数组已更改
// 
//方法2:创建新对象
// 
常数arr2=[{
_身份证号码:1
},
{
_身份证号码:2
},
{
_身份证号码:3
},
]
constresult2=arr2.map(x=>{
//创建一个新对象
常量newObject={
//从原始对象展开所有内容
//见:https://www.geeksforgeeks.org/javascript-spread-operator/
…x,
//在新对象中创建新特性
empId:x.\u id
};
//从新对象中删除_id属性
删除新对象。\u id;
//返回新对象而不是原始对象
返回newObject;
});
log('方法2:结果:',结果2)//所需结果

console.log('Approach 2:Arr2:',Arr2)//原始数组未更改
对代码进行注释,以便更好地了解每条语句中发生的情况

//
//方法1:修改实际对象
//
常数arr=[{
_身份证号码:1
},
{
_身份证号码:2
},
{
_身份证号码:3
},
]
const result=arr.map(x=>{
//在同一对象中创建新特性
//并为其指定所需的值
x、 empId=x.\u id;
//从对象中删除_id属性
删除x.。_id;
//归还物品;
返回x;
});
log('方法1:Result:',Result)//所需结果
log('Approach 1:Arr:',Arr)//原始数组已更改
// 
//方法2:创建新对象
// 
常数arr2=[{
_身份证号码:1
},
{
_身份证号码:2
},
{
_身份证号码:3
},
]
constresult2=arr2.map(x=>{
//创建一个新对象
常量newObject={
//从原始对象展开所有内容
//见:https://www.geeksforgeeks.org/javascript-spread-operator/
…x,
//在新对象中创建新特性
empId:x.\u id
};
//从新对象中删除_id属性
删除新对象。\u id;
//返回新对象而不是原始对象
返回newObject;
});
log('方法2:结果:',结果2)//所需结果

log('Approach 2:Arr2:',Arr2)//原始数组未更改
您想通过mongo还是在nodejs端执行此操作?两者都有可能。哪一个更好?请您解释这两个选项。如果您需要映射/循环浏览大量文档,那么如果让mongo这样做,您的性能会稍好一些。在映射过程中,您实际上是在阻塞事件循环。为了支持@EOL,您想通过mongo还是在nodejs端执行此操作?两者都有可能。哪一个更好?请您解释这两个选项。如果您需要映射/循环浏览大量文档,那么如果让mongo这样做,您的性能会稍好一些。在映射过程中,您实际上阻塞了事件循环。为了支持@eolthis,这将不起作用)您没有从map func返回任何内容,最好更改为
documents.map(doc=>({empId:doc.\u id,userName:doc.userName,isManager:doc.isManager}))
@NikitaMazur我说的是
地图内部发生的事情。与其执行
Object.defineProperty
,为什么不直接创建一个新属性呢。由于
delete doc.id
语句,我们正在修改原始数组。@好吧,没有理由,你可以做
doc.\u empId=doc.\u id
我刚刚做了我的第一个解决方案mind@MohamedOraby,现在看起来更好了)@NikitaMazur我也添加了你的答案这不起作用)你没有从map func返回任何东西,最好改成
documents.map(doc=>({empId:doc.\u id,userName:doc.userName,isManager:doc.isManager}))
@NikitaMazur我在谈论
地图内部发生的事情。与其执行
Object.defineProperty
,为什么不直接创建一个新属性呢。由于
delete doc.id
语句,我们正在修改原始数组。@好吧,没有理由,你可以做
doc.\u empId=doc.\u id
我刚刚做了我的第一个解决方案mind@MohamedOraby,现在看起来好多了)@NikitaMazur我也加了你的答案
exports.getEmployeeUserNames = (req, res, next) => {
  Employee.find({ 'userName': { '$nin': [null, ""] } })
    .sort('fName')
    .select('_id userName isManager')
    .then(documents => {

      // NEED TO CHANGE THE _id to empId
      // the res documents shd have structure { empId:..., userName:..., isManager:...}

      const empDocuments = documents.map(doc => {
        Object.defineProperty(doc, 'empId', Object.getOwnPropertyDescriptor(doc, '_id'));
        delete doc._id
        return doc
      })

      res.status(200).json({empDocuments});
    })
    .catch(err => {
      res.status(500).json({
        message: "Server Error in fetching Employee data!"
      });
    });
}
exports.getEmployeeUserNames = (req, res, next) => {
  Employee.find({ 'userName': { '$nin': [null, ""] } })
    .sort('fName')
    .select('_id userName isManager')
    .then(documents => {

      // NEED TO CHANGE THE _id to empId
      // the res documents shd have structure { empId:..., userName:..., isManager:...}

      const empDocuments = documents.map(doc => ({ empId: doc._id, userName: doc.userName, isManager: doc.isManager }))

      res.status(200).json(empDocuments);
    })
    .catch(err => {
      res.status(500).json({
        message: "Server Error in fetching Employee data!"
      });
    });
}