试图在 mongoose 中填充嵌套数组抛出看似无关的 CastError,我不明白为什么
Trying to populate a nested array in mongoose a seemingly unrelated CastError is thrown and I can't understand why
我是 mongoose 的新手,我正在尝试使用引用和模式进行一些非常基本的实验。
我想要做的是拥有一个 "installation" 实体,其中包含按类型分组的设备数组。在该组中有一个引用的单个设备的 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"
}
为什么我只在尝试填充 collection 时收到转换错误?
我已经尝试将 installation._id 类型更改为 Number 并且错误消失了,但是填充还是失败了:获得的结构是一个空的设备数组。
我应该怎么做才能解决这个错误?
好的,我已经解决了。
我认为 Moida 是错误的,因为 _id 字段中的类型更改也包含在 Mongoose 官方文档中。
错误出现在 ids 数组的定义中。数组应该这样定义
ids: [{type: mongoose.Schema.Types.ObjectId, ref: "device"}]
尽管我在 Whosebug 上的其他不同帖子中找到了我在问题中采用的解决方案,但它并没有奏效。我想这可能是由于以前版本的 Mongoose 中数组的定义可以通过两种方式完成。
我是 mongoose 的新手,我正在尝试使用引用和模式进行一些非常基本的实验。
我想要做的是拥有一个 "installation" 实体,其中包含按类型分组的设备数组。在该组中有一个引用的单个设备的 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"
}
为什么我只在尝试填充 collection 时收到转换错误?
我已经尝试将 installation._id 类型更改为 Number 并且错误消失了,但是填充还是失败了:获得的结构是一个空的设备数组。
我应该怎么做才能解决这个错误?
好的,我已经解决了。 我认为 Moida 是错误的,因为 _id 字段中的类型更改也包含在 Mongoose 官方文档中。
错误出现在 ids 数组的定义中。数组应该这样定义
ids: [{type: mongoose.Schema.Types.ObjectId, ref: "device"}]
尽管我在 Whosebug 上的其他不同帖子中找到了我在问题中采用的解决方案,但它并没有奏效。我想这可能是由于以前版本的 Mongoose 中数组的定义可以通过两种方式完成。