así que estoy haciendo un comando de conteo de mensajes con discord.js y MongoDB, pero el valor "messageCount" simplemente nunca se crea. Lo busqué y miré documentos, pero no pude encontrar lo que estaba mal.
Códigos:
archivo contador-mensaje.js:
const mongo = require("mongoose") const schema = require("./schemas/rank/message-count-schema") module.exports = client => { client.on('messageCreate', async (message) => { const { author } = message const { id } = author mongo.connect( process.env.MONGO_URI, { keepAlive: true } ) const dataQuery = await schema.findOne({ _id: id }) if (!dataQuery) { const newSchem = schema( { _id: id }, { $setOnInsert: { messageCount: 1 } }, { $inc: { messageCount: 1 } }, { upsert: true } ) await newSchem.save() } else { dataQuery.updateOne( { $inc: { messageCount: 1 } }, { upsert: true } ) } }) }archivo message-count-schema.js:
const mongoose = require('mongoose'); const messageCountSchema = new mongoose.Schema({ _id: { type: String, required: true }, messageCount: { type: Number, required: true } }) module.exports = mongoose.model('message-count', messageCountSchema);¿Alguien puede decirme qué está mal y cómo solucionarlo? No estoy pidiendo que me den de comer con cuchara, solo lo que está mal.
La cuestión es que $setOnInsert solo es válido para operaciones de update cuando el valor upsert se establece en verdadero. Existe en estos métodos => updateOne() , updateMany , findAndModify() . En este caso, cuando no se trata de una operación de update , $setOnInsert no se ejecuta, por lo que sus datos no tienen el valor messageCount .
Como dijo caladan antes, y además de eso, necesita .findbyId() si desea usar _id , ¿el recuento de mensajes es por usuario o por gremio? si por usuario puede agregar a su esquema un elemento de cadena de ID de usuario y usar
const member = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.author; const dataQuery = await schema.findOne({ UserID: member.id }) const messagecount = dataQuery.messageCount; console.log(messagecount)Si es por gremio, puede agregar el elemento GildId en su esquema y usar:
const dataQuery = await schema.findOne({ GuildId: message.guild.id }) const messagecount = dataQuery.messageCount; console.log(messagecount)