试图在 mongoose 中填充一个嵌套数组,抛出一个看似无关的 CastError,我不明白为啥
Posted
技术标签:
【中文标题】试图在 mongoose 中填充一个嵌套数组,抛出一个看似无关的 CastError,我不明白为啥【英文标题】:Trying to populate a nested array in mongoose a seemingly unrelated CastError is thrown and I can't understand why试图在 mongoose 中填充一个嵌套数组,抛出一个看似无关的 CastError,我不明白为什么 【发布时间】:2016-10-26 02:04:10 【问题描述】:我是 mongoose 的新手,我正在尝试使用引用和模式进行一些非常基本的实验。
我想要做的是拥有一个“安装”实体,其中包含按类型分组的设备数组。在该组内部,有一组引用的单个设备的 id。
我的架构是这样的:
///INSTALLATIONS.js
var installationSchema = mongoose.Schema(
_id: Number,
devices: [deviceType:String,
ids: type: [mongoose.Schema.Types.ObjectId], ref: 'device']
)
export const model = mongoose.model("installation", installationSchema);
///DEVICES
var deviceSchema = mongoose.Schema(
deviceType : String,
code: String
)
export const model = mongoose.model("device", deviceSchema);
填充安装:
var installationsSchemaModel = require("INSTALLATIONS.js");
installationsSchemaModel.model.find().populate('devices.ids')
我收到此错误:
2016-06-23T15:40:26.328Z - error: installations CastError: Cast to number failed for value "576ab1796c2672501fa69054" at path "_id"
这是我在 mongo 中的相关数据的外观:
///INSTALLATION I'm trying to populate. The collection contains this single item
"_id" : 131,
"devices" : [
"deviceType" : "TYPE1",
"ids" : [ObjectId("576ab1796c2672501fa69054")]
]
///DEVICE i'm trying to reference
"_id" : ObjectId("576ab1796c2672501fa69054"),
"deviceType" : "TYPE1"
为什么我只是在尝试填充我的收藏时才收到强制转换错误?
我尝试将installation._id 类型更改为Number,然后错误消失,但是填充仍然失败:获得的结构带有一个空的设备数组。
我应该怎么做才能修复这个错误?
【问题讨论】:
_id
属性是 MongoDB 内部 id,您不需要(甚至不应该)定义它并且绝对不要更改它的类型!不要这样做"_id" : 131,
。如果您在架构中需要自定义 id 属性,只需使用其他东西,也许只是 id
。
【参考方案1】:
好的,我已经解决了。 我认为 Moida 是错误的,因为 _id 字段中的类型更改也包含在 Mongoose 官方文档中。
错误出现在 ids 数组的定义中。数组应该这样定义
ids: [type: mongoose.Schema.Types.ObjectId, ref: "device"]
我在问题中采用的解决方案不起作用,尽管我在 *** 上的其他不同帖子中找到了它。我认为这可能是由于以前版本的 Mongoose 可以通过两种方式完成数组的定义。
【讨论】:
以上是关于试图在 mongoose 中填充一个嵌套数组,抛出一个看似无关的 CastError,我不明白为啥的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用