[英]MongoDB won't create a messageCount value
所以我正在使用 discord.js 和 MongoDB 創建一個消息計數命令,但永遠不會創建“messageCount”值。 我搜索了它並查看了文檔,但我找不到問題所在。
代碼:
消息計數器.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 } ) } }) }
消息計數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);
有人可以告訴我出了什么問題以及如何解決嗎? 我不是要求用勺子喂,只是出了什么問題。
問題是$setOnInsert
僅在upsert
值設置為 true 時對update
操作有效。 它存在於這些方法 => updateOne()
、 updateMany
、 findAndModify()
中。 在這種情況下,當它不是update
操作時, $setOnInsert
不會運行,這就是您的數據沒有messageCount
值的原因。
就像 caladan 之前所說的那樣,如果您想使用_id
,您還需要.findbyId()
,您的消息數是每個用戶還是每個公會? 如果每個用戶您可以向您的架構添加一個 userID String 項目並使用
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)
如果每個公會,您可以在架構中添加 GildId 項目,並使用:
const dataQuery = await schema.findOne({ GuildId: message.guild.id })
const messagecount = dataQuery.messageCount;
console.log(messagecount)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.