gpt4 book ai didi

javascript - 使用 Mongoose 查找或创建

转载 作者:IT老高 更新时间:2023-10-28 13:09:34 27 4
gpt4 key购买 nike

我有

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);
});
};

最佳答案

根据 Mongoose docs :

根据 previous SO answer

Model.findByIdAndUpdate()

“找到一个匹配的文档,根据更新参数更新它,传递任何选项,并将找到的文档(如果有的话)返回给回调。”

在选项中设置 upsert 为 true:

upsert: bool - 如果对象不存在则创建它。默认为 false。

Model.findByIdAndUpdate(id, { $set: { name: 'SOME_VALUE' }}, { upsert: true  }, callback)

关于javascript - 使用 Mongoose 查找或创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40102372/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com