试图在 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,我不明白为啥的主要内容,如果未能解决你的问题,请参考以下文章

在 mongoose 中填充嵌套数组 - Node.js

Mongoose:填充嵌套的 id 数组

MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用

填充嵌套数组的无引用对象

如何使用 'type' 在 mongoose 中使用嵌套模式来创建数组?

mongoose#populate 在数组内的嵌套对象中返回 null