如果 Discord.JS 中缺少要查找的字段,我如何为我的 MongoDB 集合添加新字段?

Posted

技术标签:

【中文标题】如果 Discord.JS 中缺少要查找的字段,我如何为我的 MongoDB 集合添加新字段?【英文标题】:How do I make the profiles for my MongoDB Collection add a new field if the field it's looking for is missing in Discord.JS? 【发布时间】:2021-09-21 06:34:43 【问题描述】:

如果用户没有配置文件,则列出的最底部字段(“dabmeup”)与其他字段一起正确创建,但当用户已经拥有配置文件时,它不会更新。 我如何正确地使代码添加字段而不覆盖该用户已经拥有的内容? 下面是我的“message.js”文件的一部分,它检查实际添加的字段。

    let profileData;
    try 
        profileData = await profileModel.findOne( userID: message.author.id );
        if (!profileData) 
            let profile = await profileModel.create(
                userID: message.author.id,
                serverID: message.guild.id,
                coins: 1000,
                bank: 0,
                sent:  type: Number ,
                received:  type: Number ,
                owner:  type: Number, default: 0 , //code: 1
                admin:  type: Number, default: 0 , //code: 1
                nyaw:  type: Number, default: 0 , //code: 2
                donator:  type: Number, default: 0 , //code: 3
                dev:  type: Number, default: 0 , //code: 4
                tester:  type: Number, default: 0 , //code: 4
                oneK:  type: Number, default: 0 , //code: 6
                tenK:  type: Number, default: 0 , //code: 7
                hundK:  type: Number, default: 0 , //code: 8
                oneM:  type: Number, default: 0 , //code: 9
                tenM:  type: Number, default: 0 , //code: 10
                hundM:  type: Number, default: 0 , //code: 11
                dabmeup: type: Number, default: 0 //code: 12
            );
            profile.save();
        
     catch (err) 
        console.log(err);
    

【问题讨论】:

【参考方案1】:

在您的模型中,如果它已经定义了默认值 0,那么您不需要在 create() 中添加它,并且 save() 在修改现有文档时使用提交。

总而言之,您的代码应如下所示


    let profileData;
    try 
        profileData = await profileModel.findOne( userID: message.author.id );
        if (!profileData) 
            let profile = await profileModel.create(
                userID: message.author.id,
                serverID: message.guild.id,
                coins: 1000,
                bank: 0,
                sent: 0,
                received: 0,
            );
        
     catch (err) 
        console.log(err);
    

【讨论】:

它仍然没有通过将新字段添加到集合中的所有配置文件来更新。 抱歉,您想将新字段添加到 mongo 或 discord.js 的集合中? 我想在集合中添加一个新字段,但其他人已经回答了我该怎么做。【参考方案2】:

您可以运行一个简单的脚本,该脚本将遍历所有没有dabmeup 属性的文档,并更新它们以包含它。这只需要运行一次。

profileModel.updateMany(
   dabmeup:  $exists: false  , // the $exists operator checks if a field exists
   $set:  dabmeup: 1   // the $set operator will set a field without modifying the rest of the document
);

【讨论】:

以上是关于如果 Discord.JS 中缺少要查找的字段,我如何为我的 MongoDB 集合添加新字段?的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 缺少对斜杠命令的访问权限

.send() 上的 discord.js 缺少权限错误

Discord.js 斜线命令说缺少访问权限,即使我有“使用斜线命令”范围

Discord.js-commando 缺少参数回复

discord.js 机器人缺少模块?

Discord.js,通过数组中的 ID 查找用户是不是具有角色