При использовании одной из моих команд для обновления документа гильдии обновляется только верхний документ гильдии, а не гильдия, в которую он отправляется. Вот изображение, чтобы объяснить это подробнее:
Я хочу сделать так, чтобы он обновлялся в гильдии, в которую его отправили. Вот что у меня есть.
Код:
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 был первоначально создан для улучшения интерактивности веб-страниц.
При использовании .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