DJS MongoDB обновляет только первый документ

При использовании одной из моих команд для обновления документа гильдии обновляется только верхний документ гильдии, а не гильдия, в которую он отправляется. Вот изображение, чтобы объяснить это подробнее:

DJS MongoDB обновляет только первый документ

Я хочу сделать так, чтобы он обновлялся в гильдии, в которую его отправили. Вот что у меня есть.

Код:

    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({

Но это просто возвращает:

TypeError: data.findOneAndUpdate is not a function

🤔 А знаете ли вы, что...
JavaScript был первоначально создан для улучшения интерактивности веб-страниц.


20
2

Ответы:

При использовании .findOneAndUpdate() он принимает два аргумента: фильтр и значение для изменения документа. В вашем коде вы в основном просите mongoose найти документ, в котором logChannel равно interaction.options.getChannel("channel").id, а затем не указываете, до чего вы его обновляете. Итак, в вашем случае все, что вам нужно сделать, это добавить фильтр, а также правильно получить данные, потому что, поскольку вы используете .findOneAndUpdate, он возвращает снимок документа до того, как он был изменен. Таким образом, ваш код может выглядеть примерно так:

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() здесь: Мангуст | найтиOneAndUpdate


Решено
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
    };
}

Это должно сработать для вас