2016-12-19 13 views
0

私は2つのコレクション、ギルドとログを持っています。ログへの参照は 'guild.mod_log.entries'に配列として保存されています。文書は正常に期限切れですが、 'mod_log.entries'の参照は削除されません。Mongoose、期限切れの参照を削除する

だから私は、期限切れの参照をどのように削除するのだろうと思っています。ここで

はギルドとエントリの間のリンクが外部キーであるように、あなたは、スキーマを再構築できスキーマ部品

// guilds.js 
 
module.exports = new mongoose.Schema({ 
 
\t _id: {type: String, required: true}, 
 
\t members: [require('./guildMember')], 
 
\t mod_log: require('./guildModLog'), 
 
\t default_role: String 
 
}); 
 

 
// guildModLog.js 
 
module.exports = { 
 
\t enabled: {type: Boolean, default: false}, 
 
\t channel_id: {type: String}, 
 
\t entries: [{type: mongoose.Schema.Types.ObjectId, ref: require('./modLogEntry')}] 
 
}; 
 

 
// modLogEntry.js 
 
module.exports = new Schema({ 
 
\t action: {type: String, required: true, enum: ['Ban', 'Unban', 'Kick', 'Warn']}, 
 
\t timestamp: {type: Date, required: true, expires: '5s'}, 
 
\t user: {type: String, required: true}, 
 
\t staff: {type: String, required: true}, 
 
\t reason: {type: String, required: true, minlength: 5, maxlength: 100}, 
 
});

答えて

0

です。これを行う

// guildModLog.js 
module.exports = { 
    enabled: {type: Boolean, default: false}, 
    channel_id: {type: String} 
}; 

// modLogEntry.js 
module.exports = new Schema({ 
    _guild_id: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'Guilds', 
     index: true 
    } 
    action: {type: String, required: true, enum: ['Ban', 'Unban', 'Kick', 'Warn']}, 
    timestamp: {type: Date, required: true, expires: '5s'}, 
    user: {type: String, required: true}, 
    staff: {type: String, required: true}, 
    reason: {type: String, required: true, minlength: 5, maxlength: 100}, 
}); 

あなたはギルドのためのMODログエントリで取得するために.populate()を使用することはできませんが、それは、すべてのデータが1つのコレクションに失効するように保持します。単純な.find()の記述は、TTL以外のコレクションのデータを期限切れにするよりも簡単です。

関連する問題