为什么MongoDB子文档到期会删除父文档?

时间:2018-06-19 12:13:14

标签: mongodb mongoose mongoose-schema subdocument

我使用猫鼬5,并且具有如下模式:

user.js

const mongoose = require('mongoose');
const GeoData = require('./geodata');

const UserSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  createdAt: {
    type: Date,
    default: Date.now()
  },
  geodata: GeoData
});

UserSchema.index({ deviceToken: 1 }, { unique: true });

module.exports = UserSchema;

geodata.js

const mongoose = require('mongoose');
const c2p = require('circle-to-polygon');

const GeoDataSchema = new mongoose.Schema({
  location: {
    coordinates: [Number],
    type: {
      type: String
    }
  },
  createdAt: {
    type: Date,
    default: Date.now()
  },
  expireAt: {
    type: Date,
    default: new Date().setHours(12,0,0,0)
  }
});

GeoDataSchema.index({ location: "2dsphere", bounds: "2dsphere" });
GeoDataSchema.index({ 'expireAt': 1 }, { expireAfterSeconds: 0 });

module.exports = GeoDataSchema;

比方说,geodata子文档被添加到父user文档中,其默认过期时间设置为本地时间12:00:00。 不幸的是,这将删除带有子文档user的父geodata,而不是仅像我期望的那样删除geodata

这是正常行为还是我缺少什么?

1 个答案:

答案 0 :(得分:1)

TTL索引始终对根文档有效,而对单个子文档或文档的其他部分则无效。

根据documentation

  

特殊的TTL索引属性支持TTL的实现   集合。 TTL功能依赖于mongod中的后台线程   读取索引中日期类型的值并删除过期的   集合中的文档。