Mon goose «RangeError: Превышен максимальный размер стека вызовов» в Model.FindOne (), когда схема включает карту (node.js) - PullRequest
0 голосов
/ 21 января 2020

Работа над новым node.js сервисом с MobgoDB и Mon goose. Я пытаюсь настроить схему для do c с динамическими c именами ключей (т.е. я заранее не знаю имени ключа). Чтобы решить эту проблему, я хотел реализовать схему типа карты mon goose. "of:" этой карты будет представлять собой массив вложенных документов на основе другой схемы (of: [subDocumentSchema]. Я реализовал на основе документации Mon goose map schematype и subdocuments Это схема:

const FeatureSubDoc = new Schema({
    path: String,
    lineNumber: Number,
    lineText: String
});
const Repo = new Schema({
    id: {
        type: String,
        match: /.+/, //TODO: change back schema defs here
        minlength: 3,
        maxlength: 60,
        required: [true, 'missing repo ID']
    },
    features: {
        type: Map,
        of: [FeatureSubDoc]

    }, // TODO: Improve Schema
    lastUpdate: {
        type: Date,
        default: Date.now(),
        required: true
    },
    created: {
        type: Date,
        default: Date.now(),
        required: true
    }
});

Я могу писать документы на основе модели этой схемы, но когда я пытаюсь Model.FindOne - я получаю «RangeError: Превышен максимальный размер стека вызовов» необработанная ошибка.

Если я вместо этого использую эту схему - все работает:

const Repo = new Schema({
    id: {
        type: String,
        match: /.+/, //TODO: change back schema defs here
        minlength: 3,
        maxlength: 60,
        required: [true, 'missing repo ID']
    },
    features: {}, // TODO: Improve Schema
    lastUpdate: {
        type: Date,
        default: Date.now(),
        required: true
    },
    created: {
        type: Date,
        default: Date.now(),
        required: true
    }
});

Мои фиктивные объекты проходят проверку, и я могу записать их в БД без проблем. Я просто продолжаю получать эту ошибку при попытке сделать Repo.findOne ({id: someID}, (err, data) => {...}.

вот фиктивный объект, который я использую для записи в db, затем пытаюсь найтиOne () в:

            {
                id: '00000_00000-00000-0000-0000-000000000',
                features:
                    {
                        playerAppend: // this is a feature's id string as a key on the project obj
                            [
                                {
                                    path: '/src/js/app.js',
                                    lineNumber: 44,
                                    lineText: 'this  is player.append thext for something'
                                },
                                {
                                    path: '/src/js/app.js',
                                    lineNumber: 78,
                                    lineText: 'sometext pokli jhjmnhj player.append'
                                }
                            ],
                        repositoryGet: // this is a feature's id string as a key on the project obj
                            [
                                {
                                    path: '/src/js/app.js',
                                    lineNumber: 34,
                                    lineText: 'hjg jhg jhg hjopj lkj in repository.get text bla 234567890'
                                },
                                {
                                    path: '/src/js/app.js',
                                    lineNumber: 23,
                                    lineText: '867yjkhjkhkjh repository.get jkhjk pokli jhjmnhj ghghfgh'
                                }
                            ],
                    },
                lastUpdate: 'Thu Dec 26 2019 14:58:36 GMT+0200 (Israel Standard Time)',
                created: 'Thu Dec 26 2019 14:58:12 GMT+0200 (Israel Standard Time)'
            }

Когда я использую последнюю схему без карты Mon goose - все работает.

У кого-нибудь есть подсказка, почему это происходит? \ Заранее спасибо, Robot55

...