在引用自身的实路径获取器中访问深度嵌套的属性

时间:2019-06-22 22:24:09

标签: node.js mongoose mongoose-populate

在我的应用程序中,我有三个模型; DeviceDeviceLinkUser,由以下所述的模式定义:

const deviceSchema = new Schema({
    link: {
        type: Schema.Types.ObjectId,
        ref: 'DeviceLink'
    },
    owner: {
        type: Schema.Types.ObjectId,
        ref: 'User'
    },
    managers: [
        {
            type: Schema.Types.ObjectId,
            ref: 'User'
        }
    ]
})

const deviceLinkSchema = new Schema({
    master: {
        type: Schema.Types.ObjectId,
        ref: 'Device',
        required: true
    },
    slaves: [
        {
            type: Schema.Types.ObjectId,
            ref: 'Device'
        }
    ]
})
const userSchema = new Schema({
    email: {
        type: String,
        required: true
    }
})

其工作原理如下:通过创建一个Device(其中一个为Device)可以将一个DeviceLink链接到另一个masterslaves个数组。此外,新创建的ObjectID的{​​{1}}被存储为两个DeviceLink的{​​{1}}属性。

该链接用于属性覆盖:如果linkDevice所引用的Device的{​​{1}},则其属性slave和{ {1}}应该被DeviceLink的{​​{1}}覆盖。

我目前尝试实现此目的的实现方法是使用覆盖这些属性的实路径获取器,例如

link

但是,owner函数无法按预期运行,并且不会使用其managers文档填充DeviceLink(这意味着当{{ 1}}是master)。是否有其他方法可以做到这一点,例如通过使用特定的deviceSchema.path('owner').get(function(value) { if ( !this.link || this.link.master._id.toString() === this._id.toString() ) { // Not linked or is master of DeviceLink return value } const masterDevice = this.link.populate({ path: 'master', model: 'Device', populate: { path: 'owner', model: 'User', }, }).master return masterDevice.owner }) 方法?问题在于,在实路径获取器中,.populate模型尚未编译,因此我不能简单地调用this.link.master

0 个答案:

没有答案