我使用猫鼬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
。
这是正常行为还是我缺少什么?
答案 0 :(得分:1)
TTL索引始终对根文档有效,而对单个子文档或文档的其他部分则无效。
特殊的TTL索引属性支持TTL的实现 集合。 TTL功能依赖于mongod中的后台线程 读取索引中日期类型的值并删除过期的 集合中的文档。