DJS MongoDB 仅更新第一个文档

DJS MongoDB Only Updating First Document

当使用我的一个命令更新公会文件时,它只更新顶级公会文件而不是它被发送的公会,这里有一张图片来进一步解释它:

我想制作它以便它在它被发送的行会中更新,这是我所拥有的。

代码:

    run: async (interaction, client) => {

        let data = await guildSchema.findOne({
            id: interaction.guild.id
        });

      // Command:

        await guildSchema.findOneAndUpdate({
             logChannel: interaction.options.getChannel("channel").id
        });
}

我也试过:

await data.findOneAndUpdate({

但那只是 returns:

TypeError: data.findOneAndUpdate is not a function

当使用 .findOneAndUpdate() 时,它需要两个参数,即过滤器和要将文档更改为的值。在您的代码中,您基本上是在要求 mongoose 搜索 logChannel 等于 interaction.options.getChannel("channel").id 的文档,然后您没有指定要将其更新到的内容。因此,在您的情况下,您所要做的就是添加过滤器并正确接收数据,因为由于您使用的是 .findOneAndUpdate,因此它 returns 是更改前的文档快照。所以你的代码可能看起来像这样:

const data = await guildSchema.findOneAndUpdate({
    id: interaction.guild.id // Give the filter here
}, 
{
    logChannel: interaction.options.getChannel("channel").id // Update the data here
}, {
    new: true // You can optionally give this property if you want to receive the new document after the change
});

您可以在此处了解有关 .findOneAndUpdate() 的更多信息:Mongoose | findOneAndUpdate

run: async (interaction, client) => {
    const data = await guildSchema.findOneAndUpdate({
        id:interaction.guild.id \it will search for your data
    }, 
    {
        logChannel: interaction.options.getChannel("channel").id
    };
}

这应该适合你