Estoy codificando un bot de Discord en java script ahora mismo. Uso MongoDB para almacenar un valor de "calor" para cada usuario en mi servidor. (El "sistema de calor" agrega una cierta cantidad a un porcentaje cada vez que el usuario hace algo mal y se lo quita después de un tiempo, para ser más específicos: -5 por ciento cada minuto en mi ejemplo).
Para hacer eso, quiero usar Model.updateMany()
en un bucle. Como puede ver a continuación, utilicé el parámetro de filtro para encontrar todos los documentos relacionados con mi servidor. La pregunta ahora es cómo puedo quitar este 5% del valor almacenado porque no es estático, sino dinámico.
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); }, };
Y también vea cómo se construye mi modelo a continuación:
const { Schema, model } = require('mongoose'); module.exports = model("heatDB", new Schema({ GuildID: String, UserID: String, Heat: String, }))
Si necesitas algo más para ayudarme, por favor házmelo saber.
Gracias de antemano,
Hidra
Si su valor de calor es un número en el esquema en lugar de una cadena, puede intentar esto:
heatdb.updateMany({ GuildID: "000000000000000000"},{$mul:{"Heat":0.95}})
Explicación: desea reducir el Calor cada vez un 5% por ciento, luego puede usar el operador mul
y establecer su valor de calor al 95% del valor actual. Le dará una deducción del 5% cada vez.