【问题标题】:Find and update dynamic values MongoDB查找和更新动态值 MongoDB
【发布时间】:2022-01-08 09:12:30
【问题描述】:

我现在正在用 java 脚本 编写 Discord 机器人。我使用 MongoDB 为我的服务器中的每个用户存储一个“热”值。 (“热系统”会在用户做错事情时增加一定的百分比,并在一段时间后再次取消,更具体地说:在我的示例中,-5% per minute) .

为此,我想在循环中使用Model.updateMany()。正如您在下面看到的,我使用 filter 参数来查找与我的服务器相关的每个文档。现在的问题是我如何才能从储值中扣除这 5%,因为它不是静态的,而是动态的。

    const { Client } = require('discord.js');
    const mongoose = require('mongoose');
    //using modules and event handlers
    module.exports = {
        name: 'ready',
        /**
         * @param {Client} client
         */
        async execute(client) {
            const heatdb = require('/app/models/heatDB.js');
            //how often the loop should pe repeated
            const interval = 10 * 60 * 1000;
            console.log('Client ready.')
            //connnecting my data
            mongoose.connect(
                'I put the mongoose link here', {
                    useNewUrlParser: true,
                    useUnifiedTopology: true
            }).then(() => {
                console.log('Data connected.')
            }).catch((err) => {
                console.log(err)
            });
            //loop begins here
            setInterval(function(){
                //filtered so that it's only searching for documents having the guild ID in it
                heatdb.updateMany({ GuildID: "000000000000000000"}, {Heat: parseInt(/*needed value*/) - 5}})
            }, interval);
        },
    };

还可以在下面查看我的模型是如何构建的:

    const { Schema, model } = require('mongoose');

    module.exports = model("heatDB", new Schema({
        GuildID: String,
        UserID: String,
        Heat: String,
    }))

如果您需要任何其他帮助我,请告诉我。

提前谢谢你,

九头蛇

【问题讨论】:

  • 这 5% 是动态的还是可以更改为任何百分比对?
  • 您可以使用 findoneAndUpdate 方法根据 GuildID 更新特定文档。
  • @GulshanAggarwal 是的,百分比可能会根据用户的行为而变化。所以你永远不知道它作为静态变量的价值。不,不止一个文档,每个用户在集合中都有自己的文档,这就是为什么我认为我不能使用“findOne...”
  • 我需要旧值才能享受 5% 的折扣,但我不知道如何定义
  • 我觉得有些混乱,让我解释一下——每个用户都有一个唯一的 GuildID、UserID 和 Heat 对吧?那么你只需要找到带有那个 GuildID 的文档并更新它的热度吗?请详细解释一下,以便我可以帮助您?

标签: javascript database mongodb discord chatbot


【解决方案1】:

如果您的热值是架构中的数字而不是字符串,那么您可以试试这个-

heatdb.updateMany({ GuildID: "000000000000000000"},{$mul:{"Heat":0.95}})

说明:-你想每次减少5%的热量,那么你可以使用mul 操作员并将您的热值设置为当前值的 95%。每次扣5%。

【讨论】:

  • 帮助很大,谢谢
  • 谢谢,@PlexHydra & 你不认为我们应该建立社交联系吗?
  • 我们可以,我主要活跃在 Discord (PlexHydra#5574) 和 Twitter (@plexhydra) 上,如果你愿意,可以推荐另一个平台
  • 让我们在 Twitter 上联系
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 2015-09-16
  • 1970-01-01
  • 2012-08-13
相关资源
最近更新 更多