我正在Express(Node.js)中编写一个路由,我在其中从mongoose中提取一些数据。让我们说在某些时候我需要比较一下,如果employee._id是坏员工的数组id ::
let employees = await EmployeeModel.find().exec();
employees.forEach(function (employee) {
if (arrayOfBadEmployees.indexOf(employee._id) !== -1) {
employee.isBad = true;
}
});
console.log(employees);
console.log(employees[0].isBad);
这是我的输出:
[ { __v: 0, name: 'Employee X', _id: 1 },
{ __v: 0, name: 'Employee Y', _id: 3 },
{ __v: 0, name: 'Employee Z', _id: 5 } ]
true
所以当我在console.log中看不到'isBad'属性时整个数组/对象,但是这个属性仍然存在?当我用propertyIsEnumerable('isBad')检查时,它说的是真的。
答案 0 :(得分:4)
默认情况下,Mongoose会返回MongooseDocument
的实例,该实例不会直接公开您的数据,并添加了populate
或save
您可以使用lean
选项来获取原始对象。
MongooseDocument
也会公开toObject
功能。