我如何在mongoose模式中创建一个数组并推送到它



我正在尝试在discord.js中制作,setchat命令。它基本上会将通道ID推送到我的mongoDB数据库,但我不知道如何才能完成

/* eslint-disable no-unused-vars */
const { MessageEmbed } = require('discord.js');
const config = require('../../utils/config.json');
const schema = require('../../models/channelSchema');
module.exports.run = async (client, message, args, utils) => {
const channel = message.mentions.channels.first();
if(!channel) return message.channel.send('please mention a channel.');
schema.channelID.push(channel.id);
message.channel.send(`chat set as <#${channel.id}>`);
};

但我得到了cannot read property push of undefined

我的模式是

const mongoose = require('mongoose');
module.exports = mongoose.model(
'channels',
new mongoose.Schema({
channelID: [],
}),
);

任何帮助都将不胜感激。谢谢

这是因为在使用之前必须对其进行初始化

您可以在模式上设置默认值

const mongoose = require('mongoose');
module.exports = mongoose.model(
'channels',
new mongoose.Schema({
channelID: {type: Array, default: []},
}),
);

这样,它将始终是一个空数组。

或者你可以检查它是否为空,并在推送之前用空数组初始化它

/* eslint-disable no-unused-vars */
const { MessageEmbed } = require('discord.js');
const config = require('../../utils/config.json');
const schema = require('../../models/channelSchema');
module.exports.run = async (client, message, args, utils) => {
const channel = message.mentions.channels.first();
if(!channel) return message.channel.send('please mention a channel.');
if(!schema.channelID) schema.channelID = [];
schema.channelID.push(channel.id);
message.channel.send(`chat set as <#${channel.id}>`);
};

然后,如果它没有初始化,它将不会出现在数据库中。

最新更新