mongoosedb到期财产未到期

时间:2017-01-06 19:52:11

标签: node.js mongodb mongoose mongoose-schema

我创建了一个包含此属性的Schema:

expire: {
    type: Date,
    default: Date.now,
    expires: 60
}

创建新文档时,它会成功将过期字段设置为当前日期时间。

没有为集合创建索引。

我随后添加了

model.on('index',function(err){
    console.log('index created');
    if (err) {
        console.log(err);
    }
});

两个日志都没有出现。

所以我假设mongoose甚至没有尝试在集合上创建ttl索引,但我不明白为什么不这样做。我错过了一步吗?我是不是想自己创建索引? mongoose docs似乎暗示mongoose处理索引的创建。

1 个答案:

答案 0 :(得分:0)

mongoosejs确实处理了可疑的索引创建。为了找到问题,我添加了一个ensureIndexes调用,如下所示:

model.ensureIndexes(function (err) {
    console.log('ensure index', err)
})

然后显示其中一个现有索引(唯一的电子邮件地址)失败,因为数据库中的现有文档并不是唯一的。

修复此问题,上面的代码然后工作正常。希望这可以帮助其他任何遇到猫鼬TTL问题的人。