MongooseError:对于db seed读取json的值,转换为ObjectID失败

时间:2017-07-16 16:45:31

标签: json node.js mongodb mongoose seeding

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

/usr/local/bin/foo/lib/libfile1.rb

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

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

在种子处理期间,在模型保存方法之后,我收到此错误:

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

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

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"

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

在您的用户文档中,您没有包含有效的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
    },
});

答案 1 :(得分:1)

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