Mongoose Population: CastError: 路径“_id”处的值“[object Object]”转换为 ObjectId 失败

2024-04-21

遇到一个CastError在 Mongoose 中填充嵌套 ObjectId 引用时(值{})显然是valid,只要它们在保存到架构时不会被阻止。

有兴趣在服务器端解决此问题以防止将来出现格式错误的数据,但是,我知道不从客户端保存这些值是一个好主意。事实上,一个空对象can保存到 Mongoose 模式type: mongoose.Schema.Types.ObjectId然后抛出一个CastError使用人口是我最关心的问题。

示例数据:

// representation of data in model
{
    "_id": /* ObjectId */,
    "refA": {} // empty object,
    "refB": /* ObjectId */,
    "refC": /* ObjectId */
}

方法示例:

// mongoose query with population
function populator(id, cb) {
    // find by string or object id
    var query = Schema.findById(id);

    // population of query
    query.populate({
        // string of fields to expand
        path: 'refA refB refC',
        // option to include virtuals
        options: {toJSON: {virtuals: true}}
    });

    // return executed query,
    // optional callback
    return _.isFunction(cb) ? query.exec(cb) : query.exec();
}

结果错误:

// error in console
{ [CastError: Cast to ObjectId failed for value "[object Object]" at path "_id"]
    message: 'Cast to ObjectId failed for value "[object Object]" at path "_id"',
    name: 'CastError',
    type: 'ObjectId',
    value: {},
    path: '_id' }

这可以被认为是 Mongoose 中的一个错误吗?

Edit:

猫鼬允许{}保存到上述架构中。

示例架构:

var schema = mongoose.Schema(mongoose.Schema{
    "refA": {type: mongoose.Schema.Types.ObjectId, ref: 'ReferenceA'},
    "refB": {type: mongoose.Schema.Types.ObjectId, ref: 'ReferenceB'},
    "refC": {type: mongoose.Schema.Types.ObjectId, ref: 'ReferenceC'}
});

处理 PUT 的方法:

var id = /* existing document */,
    body = {"refA": {}};

query = Table.findByIdAndUpdate(id, {$set: body}).lean();
query.exec(function(err, record) { /* ... */ });

确定 Mongoose 不应该允许{}保存为 ObjectId 类型。在保存新文档/处理 POST 时尚未测试过这样做。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongoose Population: CastError: 路径“_id”处的值“[object Object]”转换为 ObjectId 失败 的相关文章

随机推荐

  • Cassandra cli:将十六进制值转换为人类可读的格式

    我开始于卡桑德拉 questions tagged cassandra 当我跑步时list or get命令在cassandra cli questions tagged cassandra cli 我得到这样的结果 default use
  • 检查用户是否登录时未定义 nil

    我想使用 Firebase 来检测用户是否登录 var auth new FirebaseSimpleLogin Ref function err user if err console log err else if user conso
  • 启动脚本似乎不起作用

    我最近开始在我的一些项目中使用 Google 的计算引擎 问题是我的启动脚本似乎不起作用 由于某种原因我的脚本不起作用 虚拟机具有启动脚本元数据并且工作正常当我手动运行它时 sudo google metadata script runne
  • 如何根据百分比更改imageview中的图像颜色并将颜色填充到该百分比

    如何根据百分比填充图像TextView 它应该根据百分比变化TextView 在下面的代码中 高度布局正在改变 但我希望图像的颜色应该根据百分比 textview 电池 的值 改变 CODE private void displayData
  • 如何将 NSTimer 与这个简单的 while 循环一起使用?

    我有一个正在执行的 void 方法 在某一时刻它会进入一个 while 循环 该循环在请求时直接从加速度计获取值 我浏览了有关 NSTimer 类的文档 但我无法理解在我的情况下如何准确地使用这个对象 e g void play if ac
  • 使用代码将 X509 证书添加到存储区

    此代码会将 x509 cer 证书文件添加到证书存储中 使用System Security Cryptography X509Certificates var filename Cert cer var cert new X509Certi
  • Selenium 服务器错误:无法获取浏览器

    我在 Windows 7 上运行 Selenium Standalone Server 2 25 并使用 Internet Explorer 9 作为浏览器 对于每个需要打开浏览器的测试 我都会收到此错误 Selenium WebDrive
  • 在复合组件的属性中使用EL

    我的 JSF 自定义组件代码
  • 在 Jest .toMatchObject 中包含 toBeCloseTo

    我正在测试一个对象是否与一组字段匹配 但其中一个是浮点 我需要使用 toBeClearTo https jestjs io docs en next expect tobeclosetonumber numdigits 怎么可能在一段时间之
  • r 中不包括 NA 的列长度

    假设我有一个data frame如下 a b c 1 5 NA 6 2 NA NA 7 3 6 5 8 我想找到每列的长度 不包括 NA 答案应该是这样的 a b c 2 1 3 到目前为止 我已经尝试过 is na Gives TRUE
  • Excel公式从日期中减去天数

    Excel中有没有办法让公式执行如下操作 12 20 2010 180 这需要特定日期 本例中为 12 20 2010 并减去 180 天 假设原始日期位于单元格 A1 中 DATE YEAR A1 MONTH A1 DAY A1 180
  • 为什么 jquery 脚本不工作?

    为什么 jQuery 脚本可以在我的 jsfiddle 中运行 但不能在我的页面中运行 我所做的 尝试了不同版本的 JQuery 制作了脚本 所以我有这个测试页面 头部部分
  • 如何使用 Xcode 5 本地化我的应用程序?

    这是关于的后续问题 和答案 如何使用 Xcode 4 本地化我的应用程序 https stackoverflow com questions 5349066 how to localize my app with xcode 4 11282
  • Angular 2:实现自定义上下文菜单

    我正在实现 Angular 2 属性指令 以允许我向元素添加自定义上下文菜单 如下所示 p Hello world p 该指令添加了一个鼠标事件处理程序来捕获右键单击 其想法是构建一个上下文菜单 将其添加到 DOM 然后在用户完成操作时销毁
  • Clojure gen-class 返回自己的类

    我现在正在使用 Clojure 创建一个类对象 它有一个返回对象本身的方法 用Java编写的 我想要制作的对象是这样的 class Point public double x public double y public Point dou
  • 静态与非静态方法

    假设您有一些可以在非静态类中设为静态的方法 例如 private double power double a double b return Math Pow a b 您认为将方法签名更改为静态有什么好处吗 在上面的例子中 private
  • docker-compose 相当于 docker run --init 吗?

    根据https github com krallin tini using tini https github com krallin tini using tini tini内置于docker中 可以通过传递 init标记为docker
  • docker 容器中 PostgreSQL 的权限问题

    我正在尝试使用 PostgreSQL 运行一个 docker 映像 该映像配置了一个用于持久数据的卷 docker compose yml version 3 1 services db image postgres restart alw
  • 启动 StepFunction 并退出不会触发执行

    我有 Lambda 函数tranportKickoff它接收输入 然后将输入发送 代理到阶跃函数 下面的代码does运行 我没有收到任何错误 但同时步骤函数没有执行 对于设计也很重要 我不希望transportKickoff函数等待步骤函数
  • Mongoose Population: CastError: 路径“_id”处的值“[object Object]”转换为 ObjectId 失败

    遇到一个CastError在 Mongoose 中填充嵌套 ObjectId 引用时 值 显然是valid 只要它们在保存到架构时不会被阻止 有兴趣在服务器端解决此问题以防止将来出现格式错误的数据 但是 我知道不从客户端保存这些值是一个好主