【问题标题】:CastError: Cast to ObjectId failed for value "" at path "_id"CastError:路径“_id”处的值“”转换为 ObjectId 失败
【发布时间】:2014-06-20 02:43:45
【问题描述】:

嗯,我看到这里有一些这样的帖子,但它们对我没有帮助......

让我描述一下我的问题:

我有两个 Schema 的

var A = new Schema({
   someAttribut: {type: String},
   b: {type: ObjectId, ref:'B'}
});

var B = new Schema({
   someAttribut2: {type: Boolean, 'default': false'}
});

现在我的情况是,我已经有一个 B-Object,我想创建一个 A-Object。

所以我这样做:

var a = new A(req.aFromClient); // {_id:null, someAttribute:'123', b:null}
//load b from Database ... 
a.b = existingBFromDatabase; // {_id: 'Sb~Õ5ÙÐDâb', someAttribute2: false}

b 对象是从我的 monogDB 加载的。调试器为我的 b 显示了一个有效的 ObjectId(53627ed535d9d04416e26218 或 Sb~Õ5ÙÐDâb)。

但是当我保存我的新 A-Object 时,我收到错误:'CastError: Cast to ObjectId failed for value "" at path "_id"'

我不明白为什么会出现此错误。 首先,我没有在模式中定义 id,所以猫鼬应该添加它,这似乎有效。 其次,我认为mongoose应该在我创建一个对象的时候生成一个新的ID。

你有什么建议吗?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    根据代码中的注释,_id确实有一个值(null)。因此,您需要从 req.aFromClient 中删除 _id,然后再从中创建新的 A 文档:

    delete req.aFromClient._id;
    var a = new A(req.aFromClient);
    

    【讨论】:

    • 将其设置为 undefined 就足够了吗?
    • @Laokoon 不,如果您希望 Mongoose 为您的新文档提供 _id 值,则不能在初始文档对象中包含 _id 属性。
    【解决方案2】:

    你应该这样做:

    a.b = existingBFromDatabase._id;
    

    因为 mongoose 只适用于已经存在的对象的 id。

    【讨论】:

      猜你喜欢
      • 2016-11-11
      • 2017-03-26
      • 2017-05-26
      • 2020-05-20
      • 2019-01-06
      • 2016-05-06
      • 2018-03-17
      • 2015-07-16
      • 2020-11-19
      相关资源
      最近更新 更多