Почему истечение срока действия субдокумента 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, который считывает введенные в индекс значения в индексе и удаляет просроченные документы из коллекции.