MongooseError: Cast to ObjectID failed for value on reading json for db seed

Posted

技术标签:

【中文标题】MongooseError: Cast to ObjectID failed for value on reading json for db seed【英文标题】: 【发布时间】:2017-12-21 05:04:21 【问题描述】:

我有一个带有如下参考字段的模型方案:

const UserSchema = new mongoose.Schema(
  // ...
  uf:
    type: mongoose.Schema.Types.ObjectId, ref: 'UF', index: true
  ,
);

我的测试数据库种子代码正在使用来自 json 文件的数据,如下所示:

[
   "_id": 91283,
    "name":"Test user",
    "uf": 124411923,
    "version": 2
  
]

在种子过程中,在模型保存方法之后,我收到了这个错误:

ValidationError: User validation failed: uf: Cast to ObjectID failed for value "124411923" at path "uf"
errors:
 uf:
    MongooseError: Cast to ObjectID failed for value "124411923" at path "uf"

这是负责加载 jsons 并保存到数据库的代码,我已经对种子列表进行了排序,以便首先插入 UF:

function seed() 
  console.log('Starting db seed...');

  return Promise.each(initialData, (data) => 
    // path to mongo model js file
    let Model = require(data.model);

    removeModel(Model)
    .then(() => 
      console.log('[' + data.name + '] model removed. ');
      return saveModel(data, Model);
    ).then(() => 
      console.log('[' + data.name + '] model saved');
    ).catch( (err) => 
      console.error('Error seeding db', err);
    );
  );


/**
 * Saves model to the database
 * @param * data
 * @param * Model
 */
function saveModel(data, Model) 
  // path to json data file
  let seedList = require(data.seed);

  return Promise.map(seedList, function(seed) 
    let newItem = new Model(seed);
    return newItem.save();
  );

谁能帮忙?

【问题讨论】:

正如错误所说,124411923 不能转换为 ObjectId。 没用的朋友 抱歉,我只是不确定您遗漏了什么。您已在架构中将 uf 定义为 ObjectId,但您试图将 124411923 放入该字段。没有转换。 我正在尝试理解 mongodb 的引用概念。如何在 json 中引用另一个 mongo 文档?就像外键一样。 你可以阅读那个here。 【参考方案1】:

在您的用户文档中,您没有包含有效的 ObjectId,因此当您尝试存储为 ObjectId 类型时会出错。

Refs 只能保护 _id 字段免受其他集合的影响。

因此,在您的用户文档中,您需要包含对 UF 集合中的 _id 字段的引用:

[
    
        "_id": 91283,
        "name":"Test user",
        "uf": [_id from UF here],
        "version": 2
    
]

注意:如果您已将 UF 架构中的 _id 字段明确定义为类型 Number,那么您可以通过匹配类型从您的用户架构中引用该字段:

const UserSchema = new mongoose.Schema(
    // ...
    uf: 
        type: Number, ref: 'UF', index: true
    ,
);

【讨论】:

【参考方案2】:

您似乎没有有效的 ObjectId 字符串。尝试使用123456789012,因为它是一个 12 字节的字符串。

【讨论】:

以上是关于MongooseError: Cast to ObjectID failed for value on reading json for db seed的主要内容,如果未能解决你的问题,请参考以下文章

STRING TO HEX 如何在向量中添加 ob 字节?

`R.string.cast_casting_to_device`在哪个包中

oracle(cast , to_char , to_date )用法

SQL Server 中的 BIT_XOR ,cast_to_raw 等效项

MongooseError - 操作缓冲在 10000 毫秒后超时

MongooseError [ParallelSaveError]:无法并行保存()同一个文档