【发布时间】:2017-02-27 09:08:25
【问题描述】:
我有
Page.findById(pageId).then(page => {
const pageId = page.id;
..
});
我的问题是,如果没有给出页面 id,它应该只取第一个可用的页面给定一些条件,这是由
Page.findOne({}).then(page => {
const pageId = page.id;
..
});
但是如果没有找到页面,它应该创建一个新页面并使用它,这是完成的
Page.create({}).then(page => {
const pageId = page.id;
..
});
但是如何将所有这些组合到尽可能少的行中呢?
我有很多逻辑在里面发生
page => { ... }
所以我很想聪明地做这件事,所以我可以避免这样做
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;
..
});
}
});
}
我在想我也许可以用类似的东西为架构分配一个静态
pageSchema.statics.findOneOrCreate = function (condition, doc, callback) {
const self = this;
self.findOne(condition).then(callback).catch((err, result) => {
self.create(doc).then(callback);
});
};
【问题讨论】:
-
您是否要在此处插入一个空文档:
Page.create({}).then(page)? -
是的,这是有意的 :-)
标签: javascript node.js mongodb mongoose mongoose-schema