我一直在为一个奇怪的例外而苦苦挣扎,并且在一小时后仍然对它感到困惑。
CastError:施放到ObjectId的值失败" pedrammarandi@gmail.com" 在路径" _id" for model" Account"
我试图通过电子邮件地址检索帐户。这是我的查询
export async function getPendingRecipients(user_id, email_address) {
const account = await Account
.find({email: email_address})
.exec();
return true;
}
这是我的架构对象
const userGmailSchema = new Schema({
id: {
type: String,
unique: true
},
displayName: String,
image: Object,
accessToken: String,
user: {
type: Schema.Types.ObjectId,
ref: 'User'
},
refreshToken: {
type: String,
default: null
},
email: {
type: String,
unique: true
},
emails: [
{
type: Schema.Types.ObjectId,
ref: 'Emails'
}
]
});
答案 0 :(得分:0)
我不确定,但我想问题是你写了一个id
字段。
在MongoDB中,"主键"是_id
字段,它是ObjectId
对象(实际上它是12字节值),而在猫鼬中,id
是_id
的虚拟getter很容易说,id
是_id
的别名。
(稍有不同的是,_id
返回ObjectId
,id
返回String
_id
版本。)
默认情况下,mongoose会自动管理_id
字段,因此我们通常不应在架构中编写任何有关id
的内容。
如果您的id
用于SQL DB中的主键ID
,只需将其从mongoose架构中删除即可。如果它在您的应用中意味着其他内容,请尝试添加选项:
const userGmailSchema = new Schema({
// your schemas here
},
{
{ id: false } // disable the virtual getter
})
或重命名。
http://mongoosejs.com/docs/guide.html#id
希望这有帮助。