Работа над новым 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