我有文件:
const User = mongoose.model('User', {
age: Number,
city: String,
history: [new mongoose.Schema({
id: String,
createdAt: {
type: Date,
default: Date.now(),
index: {
expires: 60 * 60 * 5
}
}
})]
});
在“历史记录”字段中,将存储用户聊天持续5小时的ID。 5小时后,字段“历史记录”中的一个元素将被删除(已过期)。 当我创建这样的用户时:
let user = new User({
age: 20,
city: 'SPb',
history: [
{
id: 'asd',
createdAt: new Date()
}
]
});
user.save()
它创建用户文档,但在5小时后删除整个文档,而不是从数组中删除元素:(
答案 0 :(得分:2)
使用TTL索引无法做到这一点。请参阅documentation说明:
TTL索引是MongoDB可以使用的特殊单字段索引 一定后自动从集合中删除文档 时间或在特定时钟时间。
您需要自己编写清理逻辑,或者将要删除的元素建模为单独的文档,然后可以通过TTL索引进行清理。