Как создать ключи схемы Mongoose из JSON

Я пытаюсь понять, как определить ключи схемы Mongoose через файл JSON. Код, который я сейчас пытаюсь реализовать, выглядит так:

const schemaData = require('./myData.json')

const mySchema = new mongoose.Schema();

schemaData.pages.forEach(page => {
    page.forEach(subpages => {
        mySchema.add(subpage.uniqueID : {type: String, default: ''});
    }
};

Я видел несколько примеров того, как определить схему через JSON, но пока не вижу способа динамически определить имя ключа?

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просмотреть ключи вашего Json, а затем добавить объект с помощью [key]: { type: 'String', default: '' }. Фрагмент кода запускает пример с простым объектом (не схемой).

let schema = {};
let jsonData = {
  foo: 'foo45',
  bar: 'bar',
  toto: 'toto'
}
Object.keys(jsonData).map(function(key) {
  schema[key] = { type: 'String', default: ''}
});
console.info(schema);

Адаптация для мангуста.Схема

const mySchema = new mongoose.Schema({});
const schemaData = require('./myData.json')

// map down to where you need to get your subpages
Object.keys(subpages).map(function(key) {
  mySchema.add({
    [key]: { type: 'String', default: ''}
  });
});
console.info(mySchema.paths);

Это даст:

{ _id: 
   ObjectId {
     path: '_id',
     instance: 'ObjectID',
     validators: [],
     getters: [],
     setters: [ [Function: resetId] ],
     options: { auto: true, type: [Function] },
     _index: null,
     defaultValue: { [Function: defaultId] '$runBeforeSetters': true },
     [Symbol(mongoose#schemaType)]: true },
  foo: 
   SchemaString {
     enumValues: [],
     regExp: null,
     path: 'foo',
     instance: 'String',
     validators: [],
     getters: [],
     setters: [],
     options: { type: 'String', default: '' },
     _index: null,
     defaultValue: '',
     [Symbol(mongoose#schemaType)]: true },
  bar: 
   SchemaString {
     enumValues: [],
     regExp: null,
     path: 'bar',
     instance: 'String',
     validators: [],
     getters: [],
     setters: [],
     options: { type: 'String', default: '' },
     _index: null,
     defaultValue: '',
     [Symbol(mongoose#schemaType)]: true },
  toto: 
   SchemaString {
     enumValues: [],
     regExp: null,
     path: 'toto',
     instance: 'String',
     validators: [],
     getters: [],
     setters: [],
     options: { type: 'String', default: '' },
     _index: null,
     defaultValue: '',
     [Symbol(mongoose#schemaType)]: true } }

Посмотрев на ваше решение, я заметил, что на самом деле это была глупая синтаксическая ошибка с моей стороны, которая вызвала некоторые ошибки. :) Тем не менее, ваше решение выглядит немного более чистым, и мне, как новичку в JavaScript, всегда полезно узнать о других способах итерации. Спасибо!

Kronon 09.04.2019 02:50

Другие вопросы по теме