Mongoose:CastError:在路径“items”处为值“ value:'x'”转换为嵌入失败
Posted
技术标签:
【中文标题】Mongoose:CastError:在路径“items”处为值“ value:\'x\'”转换为嵌入失败【英文标题】:Mongoose: CastError: Cast to embedded failed for value " value: 'x' " at path "items"Mongoose:CastError:在路径“items”处为值“ value:'x'”转换为嵌入失败 【发布时间】:2021-05-02 03:58:30 【问题描述】:更新到 Mongoose 5.11.13 后,尝试将项目添加到文档内的子对象时出现以下错误。
CastError: Cast to embedded failed for value " value: 'new item' " at path "items"
at model.Query.exec (D:\repos\pushbox\node_modules\mongoose\lib\query.js:4358:21)
at model.Query.Query.then (D:\repos\pushbox\node_modules\mongoose\lib\query.js:4452:15)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
messageFormat: undefined,
stringValue: `" value: 'new item' "`,
kind: 'embedded',
value: " value: 'new item' ",
path: 'items',
reason: TypeError: this.ownerDocument(...).isSelected is not a function
我的主要 Schma 称为 Card
。它包含一个名为 Property
的子对象/子文档,它看起来像这样:
export const CardSchema = new mongoose.Schema(
title:
type: String,
required: true,
,
description:
type: String,
default: '',
,
// Checklists in a Card
checklists: [
title:
type: String,
required: true,
,
items: [
name: String,
select: Boolean,
],
],
// Properties in a card
properties: [
name:
type: String,
required: true,
,
items: [
value: type: String, default: '' ,
isSelected: type: Boolean, default: false ,
],
],
box:
type: ObjectId,
ref: 'Box',
,
,
timestamps: createdAt: true, updatedAt: true ,
);
用于在property
中插入新的item
的查询是:
const newPropItem = await Card.findOneAndUpdate(
_id: cardId,
'properties._id': propertyId,
,
$push:
'properties.$.items': value: newItem.trim() ,
,
,
new: true,
,
);
我不知道为什么会发生这种情况,因为我们对 Checklist
有类似的查询并且它有效。我在 mongo shell 中尝试了这个查询,它在那里工作。你们能帮我弄清楚我到底错过了什么吗?
哦,我也尝试查看整个 TypeError: this.ownerDocument(...).isSelected is not a function
部分,但没有找到任何可以帮助我的情况
【问题讨论】:
如果你的问题没有解决,请留言,否则接受我的回答 【参考方案1】:您不能在 Schema 中使用 isSelected
作为字段名称,因为 isSelected()
在内部用于检查我们需要在 mongoose 中验证哪些路径,因此请更改字段
命名为isSelect
或...
【讨论】:
你是对的。正如您在 Schema 中看到的,我也有Checklists
,它使用相同的结构,但使用变量 select
。这就是为什么Checklists
继续工作而Properties
在更新到5.11.13
后开始失败的原因。现在,Mongoose 社区已将其视为官方错误,他们将在 5.11.15
中发布修复程序。太感谢了!您可以在此处关注错误:github.com/Automattic/mongoose/pull/9886以上是关于Mongoose:CastError:在路径“items”处为值“ value:'x'”转换为嵌入失败的主要内容,如果未能解决你的问题,请参考以下文章
mongoose.js CastError:在路径“未定义”处为值“[object Object]”转换为数字失败
Mongoose:CastError:对于模型“”的路径“_id”处的值“”,转换为 ObjectId 失败
mongoose CastError:在路径“apps”处为值“[object Object]”转换为未定义失败
CastError:TypeScript REST 和 Mongoose 中路径“_id”处值“1225589795”的值“1225589795”转换为 ObjectId 失败
Mongoose CastError:模型“Post”的路径“_id”处的值“未定义”转换为 ObjectId 失败
Mongoose CastError:模型“Task”的路径“_listId”的值“:listId”转换为 ObjectId 失败