node.js - 如果特定公会不存在,则数据库错误
问题描述
我的不和谐机器人上有每个公会设置。但是,由于某种原因,如果公会不存在,则会出错。我的机器人所在的公会超过 150 个,而且这是最近才添加的。我不知道该怎么做才能让它工作......
如果数据为空,我尝试了不同的调用方法,但我总是收到错误并最终得到这个原始代码块
client.updateGuild = async (guild, settings) => {
let data = await client.getGuild(guild);
if (typeof data !== 'object') data = {};
for (const key in settings) {
if (data[key] !== settings[key]) data[key] = settings[key];
else return;
}
console.log(`Guild "${data.guildName}" updated settings: ${Object.keys(settings)}`);
return await data.updateOne(settings);
};
如果公会不存在,它应该为公会创建一个新条目并在有人运行配置命令时保存更新的配置设置
client.createGuild = async settings => {
const defaults = Object.assign({ _id: mongoose.Types.ObjectId() }, client.config.defaultSettings);
const merged = Object.assign(defaults, settings);
const newGuild = await new Guild(merged);
return newGuild.save()
.then(console.log(`Default settings saved for guild "${merged.guildName}" (${merged.guildID})`));
};
这是更新后添加到公会时运行的命令,但就像我说的那样有超过 150 个旧的;-;
解决方案
如果我理解正确,问题就出在此处:
return await data.updateOne(settings);
data
应该是实际的collection/model
,根据let data = await client.getGuild(guild);
它应该返回一个模型,但我 99% 确定它不是。好吧,我看不出是什么client.getGuild
,所以..这就是为什么我只确定 99%- 问题的第二个向量在这里,
settings
对象应该等于这些模式:{filter_field: value},{update_field: value},{upsert:true}
因此:
... = await model_name.updateOne({filter: value},{update: field},{upsert:true}).exec(callback)
更重要的是,如果你想:
如果没有数据库条目,我需要该
updateGuild
函数来运行该函数createGuild
我猜在updateGuild
里面,应该看起来像这样,没有createGuild
方法:
let result = await model_name.findOneAndUpdate(
{
fieldName: filterValue,
},
new Class(object),
{
upsert : true,
new: true,
setDefaultsOnInsert: true,
runValidators: true,
lean: true
}
).exec();
在这种情况下,result
变量已经更新了文档数据,如果成功,一些值可以通过破坏性方法显示给机器人的用户。或者直接触发,如果允许的话await createGuild();
,在没有上行代码片段的情况下。updateGuild
推荐阅读
- javascript - 显示不同
- flutter - 如何在 Flutter 小部件测试中获取当前变量值
- spring-mvc - Spring MVC 中的 ContentNegotiatingViewResolver 问题
- vue.js - 在另一个组件中使用来自一个组件的函数
- c# - AnimatorStateInfo(0).IsName 返回状态是否以某个单词结尾
- android - 提取上传密钥和谷歌签名密钥时如何使哈希值相同
- ant-media-server - 如何在 AWS 上使用 cloudformtion 创建具有自定义 VPC 的 Ant Media Server 自动扩展集群?
- wordpress - Is there a way to bulk toggle 'Fuzzy' translations in Loco Translate?
- coldfusion - How to use reserved keyword as variable in ColdFusion?
- javascript - Highcharts not opening in a modal