在 MongoDB 文档中使用 $inc 函数

Posted

技术标签:

【中文标题】在 MongoDB 文档中使用 $inc 函数【英文标题】:Using the $inc function across the MongoDB documents 【发布时间】:2021-08-19 05:42:00 【问题描述】:

我目前正在为我的 Discord 机器人开发审核系统,但遇到了一个意外问题。我一直在使用 $inc 函数来增加单个文档的值,但遗憾的是我没有实现在多个不同文档中使用 $inc 函数,这意味着我想增加 ($inc) 新文档的值根据上一个文档的编号进行文档。

示例:Cases

当前代码:

async run(client, message, args, Discord) 

    const targetMention = message.mentions.users.first()
    const userid = args[0]
    const targetId = client.users.cache.find(user => user.id === userid)
    const username = targetMention.tag

    if(targetMention)
       
        args.shift()

        const userId = targetMention.id
        const WarnedBy = message.author.tag
        const reason = args.join(' ')

        if(!reason) 
            message.delete()
            message.reply('You must state the reason behind the warning you are attempting to apply.').then(message => 
                message.delete( timeout: 6000)
            );
            return;
        

        const warningApplied = new Discord.MessageEmbed()
        .setColor('#ffd200')
        .setDescription(`A warning has been applied to $targetMention.tag :shield:`)

        let reply = await message.reply(warningApplied)
        let replyID = reply.id

        message.reply(replyID)

        const warning = 
            UserId: userId,
            WarnedBy: WarnedBy,
            Timestamp: new Date().getTime(),
            Reason: reason,

        

        await database().then(async database => 
            try
                await warnsSchema.findOneAndUpdate(
                    Username: username,
                    MessageID: replyID
                , 
                    $inc: 
                        Case: 1
                    ,
                    WarnedBy: WarnedBy,
                    $push: 
                        warning: warning
                    
                , 
                    upsert: true
                )
             finally 
                database.connection.close()
            
        )
    
    if(targetId)
       
        args.shift()

        const userId = message.member.id
        const WarnedBy = message.author.tag
        const reason = args.join(' ')

        if(!reason) 
            message.delete()
            message.reply('You must state the reason behind the warning you are attempting to apply.').then(message => 
                message.delete( timeout: 6000)
            );
            return;
        

        const warning = 
            userId: userId,
            WarnedBy: WarnedBy,
            timestamp: new Date().getTime(),
            reason: reason
        

        await database().then(async database => 
            try
                await warnsSchema.findOneAndUpdate(
                    userId,
                , 
                    $inc: 
                        Case: 1
                    ,
                    WarnedBy: WarnedBy,
                    $push: 
                        warning: warning
                    
                , 
                    upsert: true
                )
             finally 
                database.connection.close()
            
            const warningApplied = new Discord.MessageEmbed()
            .setColor('#ffd200')
            .setDescription(`A warning has been applied to $targetId.tag :shield:`)
            message.reply(warningApplied)
            message.delete();
        )
    

附加到代码的架构:

const warnsSchema = database.Schema(
    Username: 
        type: String,
        required: true
    ,
    MessageID: 
        type: String,
        required: true
    ,
    Case: 
        type: Number,
        required: true
    ,
    warning: 
        type: [Object],
        required: true
    
)
module.exports = database.model('punishments', warnsSchema)

【问题讨论】:

您应该edit your question 并向我们展示您当前的代码。 没问题!已编辑。 【参考方案1】:

回答我自己的问题。对于所有试图做与我完全相同的人来说,有一种更简单的方法可以让它正常工作。 $inc (increase) 函数不能作为文档的主要属性。在您的数据库中实现此功能的更简单方法是在 Discord 机器人文件中创建一个 .json 文件并添加如下行:


 "Number": 0

之后,您需要“npm i fs”以便实时读取目录。 您可以继续添加一个函数来增加或减少“数字”的值。 您必须确保通过键入以下内容将变量导入当前编码文档:

const Number = require('./config.json') 

config.json 可以任意命名,仅作为示例。

现在您可以console.log(Number) 以确保该数字是您所期望的,并且您现在可以通过输入Number+=[amount] 来增加它

希望对您有所帮助。

【讨论】:

以上是关于在 MongoDB 文档中使用 $inc 函数的主要内容,如果未能解决你的问题,请参考以下文章

《MongoDB入门教程》第15篇 文档更新之$inc操作符

《MongoDB入门教程》第15篇 文档更新之$inc操作符

mongodb_修改器($inc/$set/$unset/$push/$pop/upsert......)

mongodb_修改器($inc/$set/$unset/$push/$pop/upsert......)

mongodb_修改器($inc/$set/$unset/$push/$pop/upsert......)

findOneAndUpdate 未在 MongoDb 中返回更新的文档 [重复]