Node.js 猫鼬找到匹配项,但不';t修改

Node.js 猫鼬找到匹配项,但不';t修改,node.js,mongodb,mongoose,discord.js,Node.js,Mongodb,Mongoose,Discord.js,我是Mongoose的新手,还不知道如何使用updateOne()函数 const statusChannelIDSchema = require('../models/statusChannelIDs.js'); var filter = {guildId: guildId}; var update = {$set: {statusChannelID: statusChannelID}}; statusChannelIDSchema.updateOne(fi

我是Mongoose的新手,还不知道如何使用updateOne()函数

    const statusChannelIDSchema = require('../models/statusChannelIDs.js');


    var filter = {guildId: guildId};
    var update = {$set: {statusChannelID: statusChannelID}};
    statusChannelIDSchema.updateOne(filter, update, function(err){
        console.log(err);
    })
    .then(result => console.log(result))
    .catch(err => console.log(err));
console.log(结果)将输出:

null
{ n: 1, nModified: 0, ok: 1 }
所以它匹配,但不修改。不确定“null”在那里做什么

这是我的/models/statusChannelIDs.js文件

const mongoose = require('mongoose');

const statusChannelIDSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    statusChannelID: Number,
    guildId: {
       type: Number,
       required: true,
       unique: true
    },
    userId: Number,
    channelId: Number,
    msgId: Number,
    userName: String
})

module.exports = mongoose.model("statusChannelIDs", statusChannelIDSchema);
我做错了什么


如何更好地调试mongoose?

经过长时间的调试,我终于找到了问题:

  • 我在discord.js中使用它,它们的ID非常长(比标准的int长),所以必须将它们存储为字符串,否则它们会被解析得非常奇怪
  • 数据库中的集合不能有大写字母

  • guildId和statusChannelID是符合您的模式的数字类型,请尝试在更新中使用相同的类型,而不是字符串。@FernandoZamperin您的意思是这样吗?var filter={guildId:guildId};var update={$set:{statusChannelID:statusChannelID}}以上代码返回完全相同的结果我做错了吗?是的,但这两个变量的类型都是数字吗?@FernandoZamperin我用typof检查并使用parseInt()确保结果仍然相同。请尝试此操作,看看它是否有效->statusChannelIDSchema.findOneAndUpdate(filter,update)。然后(result=>console.log(result)).catch(err=>console.log(err));PS:不带$set