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 失败