猫鼬。设置生活到特定领域的时间

时间:2018-02-14 13:56:50

标签: javascript mongodb mongoose

我有文件:

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小时后删除整个文档,而不是从数组中删除元素:(

1 个答案:

答案 0 :(得分:2)

使用TTL索引无法做到这一点。请参阅documentation说明:

  

TTL索引是MongoDB可以使用的特殊单字段索引   一定后自动从集合中删除文档   时间或在特定时钟时间。

您需要自己编写清理逻辑,或者将要删除的元素建模为单独的文档,然后可以通过TTL索引进行清理。