【发布时间】:2019-01-14 10:21:00
【问题描述】:
我有一个名为 getTeamEmployees 的方法,它应该获取 teamId 等于方法参数 teamId 的员工。它看起来像这样:
public getTeamEmployees(teamId: number): Promise<any> {
return MDBDatabaseController.EmployeeModel.find({ teamId: teamId }).exec();
}
我已经启用了 mongoose 调试,并且在控制台中我可以看到 mongoose 执行了什么查询。这是查询:
employees.find({ teamId: 13 }, { fields: {} })
如果我使用 mongo shell 执行此操作,我会得到:
db.employees.find({ teamId: 13 }, { fields: {} })
Error: error: {
"ok" : 0,
"errmsg" : ">1 field in obj: {}",
"code" : 2,
"codeName" : "BadValue"
}
如果我在没有 { fields: {} } 部分的情况下执行它,一切都很好。它给了我 5 个结果。
我正在使用带有 typescript 的猫鼬,我的模型是这样实例化的:
MDBDatabaseController.EmployeeModel = model<IEmployee>('Employee', EmployeeSchema.schema);
其中 IEmployee 是一个扩展 mongoose.Document 的接口,并有一个名为 teamId 的字段,其类型为 Number大写N。
EmployeeSchema 是一个类,它有一个名为“schema”的静态属性,它等于 mongoose.Schema 的一个新实例,该实例有一个名为 teamId 的属性数字类型的。
可能是什么问题?
【问题讨论】:
-
看起来 find 方法在 find 查询中添加了 { fields: {} } 。值得检查您正在使用的猫鼬版本。还可以尝试使用简单的模型类而不是静态属性来完成。然后你就会知道罪魁祸首