试图在 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 中数组的定义可以通过两种方式完成。