簡體   English   中英

MongoDB 不會創建 messageCount 值

[英]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()updateManyfindAndModify()中。 在這種情況下,當它不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM