Как получить неопределенные поля из нестрогой схемы Mongoose?

#node.js #mongodb #express #mongoose

#node.js #mongodb #выразить #mongoose

Вопрос:

Я создал схему Mongoose для коллекции в моей базе данных с именем ‘instruments’. Я сделал ее нестрогой, потому что записи, которые должны быть вставлены туда, могут содержать определенное неизвестное количество пар поле-значение. Имена и значения полей также неизвестны. Теперь он успешно сохраняет документы независимо от того, какие новые поля включены, но у меня проблема, из-за которой, когда я пытаюсь извлечь эти документы и ссылаюсь на динамические пары поле-значение внутри, используя точечную нотацию JS, я получаю undefined. Я смог успешно получить значения полей, которые я указал в своей схеме, хотя, когда я печатаю весь возвращенный документ, я вижу пары поле-значение, которые я ищу. Это естественное поведение Mongoose? Если да, что я могу сделать, чтобы по-прежнему иметь возможность получать поля, которых нет в схеме? Смотрите приведенные ниже коды для справки…

Схема для инструмента

 
    var mongoose = require('mongoose');

    var Schema = mongoose.Schema;

    var subConfigsSchema = new Schema({
        alias: String,
        value: String,
        position: Number
    }, {_id: false});

    var configsSchema = new Schema({
        bfq: [subConfigsSchema],
        qpa: [subConfigsSchema],
        fmb: [subConfigsSchema],
        cz: [subConfigsSchema]
    }, {_id: false});

    var instrumentSchema = new Schema({
        _id: {
            type: Schema.Types.ObjectId,
            required: true,
            auto: true
        },
        configs: {
            type: configsSchema,
            required: true
        }
    },
    {
        strict: false,
        versionKey: false
    });

    module.exports = mongoose.model('Instrument', instrumentSchema)

  

Пример запроса

 
    Instrument.find({_id: '5c9b3747407939296c5af1da'}, function(err, data) {
                if (err) throw err;

                instrument = data[0];

                console.log(instrument);
                console.log(instrument._id);
                console.log(instrument.inpname);
                console.log(Instrument['inpname']);
    });

  

Вывод прямо сейчас:

 { _id: 5c9b3747407939296c5af1da, 
 inpname: 'Nome', 
 конфигурации:
 { bfq: [ [Объект] ], 
 qpa: [ [Объект] ], 
 fmb: [ [Объект] ], 
 cz: [ [Объект] ] } }
 5c9b3747407939296c5af1da 
не определено 
 не определено

Я ожидаю, что оба неопределенных значения будут ‘Nome’.