Encuentra uno o crea con Mongoose
yo tengo
Page.findById(pageId).then(page => {
const pageId = page.id;
..
});
Mi problema es que si no se proporciona una identificación de página, solo debería tomar la primera página disponible dadas algunas condiciones, que se realiza mediante
Page.findOne({}).then(page => {
const pageId = page.id;
..
});
pero si no se encuentra ninguna página, debería crear una nueva página y usarla, lo que se hace con
Page.create({}).then(page => {
const pageId = page.id;
..
});
Pero, ¿cómo combino todo esto con la menor cantidad de líneas posible?
Tengo mucha lógica dentro
page => { ... }
así que me gustaría mucho hacer esto de manera inteligente, así puedo evitar hacerlo así
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;
..
});
}
});
}
Estoy pensando que tal vez podría asignar una estática al esquema con 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);
});
};