Encontre um ou crie com o Mongoose
eu tenho
Page.findById(pageId).then(page => {
const pageId = page.id;
..
});
Meu problema é que, se nenhum ID de página for fornecido, ele deverá apenas pegar a primeira página disponível, com algumas condições, o que é feito por
Page.findOne({}).then(page => {
const pageId = page.id;
..
});
mas se nenhuma página for encontrada, ela deve criar uma nova página e usá-la, o que é feito com
Page.create({}).then(page => {
const pageId = page.id;
..
});
Mas como combinar tudo isso com o mínimo de linhas possível?
Eu tenho muita lógica acontecendo dentro
page => { ... }
então eu gostaria muito de fazer isso de forma inteligente, para evitar assim
if (pageId) {
Page.findById(pageId).then(page => {
const pageId = page.id;
..
});
} else {
Page.findOne({}).then(page => {
if (page) {
const pageId = page.id;
..
} else {
Page.create({}).then(page => {
const pageId = page.id;
..
});
}
});
}
Eu estou pensando que talvez eu possa atribuir uma estática ao esquema com algo como
pageSchema.statics.findOneOrCreate = function (condition, doc, callback) {
const self = this;
self.findOne(condition).then(callback).catch((err, result) => {
self.create(doc).then(callback);
});
};