#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’.