当集合2中的文档过期时,我从集合1中删除子文档时遇到问题。
我有下面的购物车架构。
var cartSchema = new schema({
userName : {type: String, default: null},
total : {type: Number, default: 0},
qty : {type: Number, default: 0},
productId : {type: String, default: null},
createdAt : {type: Date, default: Date.now, expires: 7200} // expired in 2 hours
});
这里我有一个架构,用于保存与carted
cartSchema
var merchantSchema = new schema({
seller : String,
address : String,
email : String,
products : [
{
title : String,
ingredients : String,
qty : Number,
carted : [
{
qty : Number,
cartId : String,
createdAt : {type: Date, default: Date.now}
}
}
],
});
由于expireAt
查询会自动运行,因此我不知道如何在购物车过期和删除时自动删除购物对象。
当cartSchema
中id 123
的购物车已过期并已删除时,带有id 123
的购物车对象中的购物车也将被删除。
如果我在expires
中添加merchantSchema createdAt : {type: Date, default: Date.now, expires: 7200}
属性,则会删除整个文档。
答案 0 :(得分:1)
您无法使用TTL index
删除子文档。
可以通过population
更改数据架构来完成一个解决方法,如下所示
var merchantSchema = new schema({
seller : String,
address : String,
email : String,
products : [productSchema],
});
var Merchant = mongoose.model('Merchant', merchantSchema);
var productSchema = new Schema({
title : String,
ingredients : String,
qty : Number
});
var Product = mongoose.model('Product', productSchema);
var cartSchema = new schema({
userName : {type: String, default: null},
total : {type: Number, default: 0},
qty : {type: Number, default: 0},
productId : {type: Schema.Types.ObjectId, ref: 'Product'},
createdAt : {type: Date, default: Date.now, expires: 7200} // expired in 2 hours
});
然后createdAt
到期,然后cart
文档将被删除,并且没有与product
文档相关的购物车信息。