Ссылочный элемент в подсхеме модели в Mongoose ODM

Я настраиваю свои модели MongoDB, и у меня есть схема одной модели (модель Partition), настроенная таким образом, что один из элементов схемы (fields) представляет собой массив элементов, следующих другой схеме (схема Field)

Вот модель раздела (со схемой раздела и схемой поля):

// Partition model
module.exports = Mongoose => {     
    const Schema = Mongoose.Schema

    // Field Schema
    const fieldSchema = new Schema({
        name: {
            type: Schema.Types.String
        }
    })

    // Partition Schema
    const partitionSchema = new Schema({
        name: {
            type: Schema.Types.String
        },
        // `fields` is an array of objects that must follow the `fieldSchema`
        fields: [ fieldSchema ]
    })

    return Mongoose.model( 'Partition', partitionSchema )
}

Затем у меня есть другая модель (модель Asset), в которой есть массив attributes, содержащий объекты, каждый из которых имеет два элемента, _field и value. _field должен быть идентификатором, который будет ссылаться на элемент в значениях fields._id моделей разделов.

Вот модель активов:

// Asset model
module.exports = Mongoose => {     
    const Schema = Mongoose.Schema

    const assetSchema = new Schema({
        attributes: [{
           // The attributes._field should reference one of the Partition field values
            _field: {
                type: Schema.Types.ObjectId,
                ref: 'Partition.fields' // <-- THIS LINE
            },
            value: {
                type: Schema.Types.Mixed,
                required: true
            }
        }],
        // Reference the partition ID this asset belongs to
        _partition: {
            type: Schema.Types.ObjectId,
            ref: 'Partition'
        }
    })

    return Mongoose.model( 'Asset', assetSchema )
}

У меня возникают проблемы с элементом _field в схеме Asset. Я не уверен, что мне следует установить в качестве значения ref, поскольку оно ссылается на подсхему (имеется в виду схема Field в схеме Partition)

Я, возможно, проглядел это в документах, но я ничего не видел. Как я могу ссылаться на подсхему моделей, поэтому, когда я заполняю этот элемент в запросе, он заполняет его поддокументами внутри Partition типовых документов?

Я попытался сослаться на полевые документы как Partition.fields, что привело к ошибке:

MissingSchemaError: схема не зарегистрирована для модели «Partition.fields».

Я попробовал указанное выше значение ref на основе того, что я прочитал из другого потока SO, но, похоже, оно не работает.


person Justin    schedule 27.01.2016    source источник
comment
Не могли бы вы просто иметь свой раздел, содержащий массив ссылок на поля? например поля: [ { тип: mongoose.Schema.Types.ObjectId, ссылка: 'поле' } ]   -  person paulgoblin    schedule 27.01.2016
comment
На самом деле я думал об этом... Но если я могу избежать этого, я лучше избегу этого. Если никто не может дать мне ответ, как это сделать, то мне придется это сделать. Но я думаю, что это возможно, по крайней мере, прочитав это, я думаю я просто делаю что-то не так   -  person Justin    schedule 28.01.2016


Ответы (1)


Судя по всему, это невозможно.. Так что я просто прибегну к созданию другой модели.

person Justin    schedule 29.01.2016