【问题标题】:MongoDB not removing TTL indexed documentsMongoDB 不删除 TTL 索引文档
【发布时间】:2016-08-03 20:31:58
【问题描述】:

我知道关于这个问题还有其他问题;没有,(我试过),已经解决了我的问题。

使用 MongoDB 3.2.1、Mongoose 4.4.x、节点 0.12.9 或 4.2.6。

Mongoose 架构如下:

var schema = new Schema({
  userId: {type: Schema.Types.ObjectId, ref: 'User', required: true},
  createdAt: {type: Date, required: true, default: Date.now, expires: 10}
});

在 Mongo Shell 和 RoboMongo 中都验证了索引:

我尝试过在不同的字段上设置 TTL 索引,使用不同的创建索引的方法,以及其他一些事情。然而,文件仍然存在,即使在放置一夜之后,将 createdAt 字段编辑为过去的某个时间。

想法?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    我有 MongoDB 3.2 并使用以下代码 sn-p 测试了解决方案。

    var MongoClient = require('mongodb').MongoClient,
        assert = require('assert'),
        mongoose = require('mongoose'),
        Schema = mongoose.Schema;
    
    var url = "mongodb://localhost:27017/test"
    mongoose.connect(url);
    
    var schema = new Schema({
        userId: {
            type: Schema.Types.ObjectId,
            ref: 'User', required: true
        },
        createdAt: {
            type: Date,
            required: true,
            default: Date.now,
            expires: 10
        }
    });
    
    var User = mongoose.model('User', schema);
    
    var user = new User({ userId: new mongoose.Types.ObjectId });
    
    user.save(function(err, doc) {
        if (err) {
            console.log(err);
        }
        mongoose.disconnect();
    });
    

    我看到该文档大约在一分钟后被删除(不完全是 10 秒)。我建议你获取最新的 mongoose,然后再试一次。

    【讨论】:

    • Mongoose 版本是 4.4.12,这是当前版本。我猜这是我机器上本地安装 Mongo 的问题。我今天将在暂存服务器上进行测试,看看是否有任何改变。
    猜你喜欢
    • 2014-05-05
    • 2019-09-23
    • 2013-09-14
    • 2016-04-20
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多