Почему истечение срока действия субдокумента MongoDB удаляет родительский документ?

Я использую mongoose 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 ответ

Решение

Индекс TTL всегда работает с корневым документом, а не с отдельными вложенными документами или другими частями документа.

Согласно документации:

Специальное свойство индекса TTL поддерживает реализацию коллекций TTL. Функция TTL основана на фоновом потоке в mongod, который считывает введенные в индекс значения в индексе и удаляет просроченные документы из коллекции.

Другие вопросы по тегам