Pavel Delgado
Pavel Delgado

Reputation: 99

How to set a expires for a subdocument in mongoose

This is my schemes:

var authUserScheme = mongoose.Schema({
    token: String,
    ip: String,
    valid: {type: Date, default: Date.now(), expires: '1m' },   
}, {_id: false});

var usersSchema = mongoose.Schema({
// OTHER THINGS
     auth : [ authUserScheme ],
// other things
});

When i set an 'auth' path, mongodb deletes the entire document, but i want to delete only the auth row when expire date... It is possible?

Sorry for my english, i speak spanish.

Upvotes: 4

Views: 2782

Answers (1)

Stennie
Stennie

Reputation: 65333

You can't use a TTL index to delete a portion of a document on expiry.

However, it looks like your authUserScheme is really more of a session concept than an embedded document.

A better approach would be to use a reference from the authUserScheme to the related user, eg:

var authUserSchema = mongoose.Schema({
    token: String,
    ip: String,
    valid: {type: Date, default: Date.now(), expires: '1m' },
    user: { type: Number, ref: 'User' }
});

var userSchema = mongoose.Schema({
    name: String,
    // Other fields
})

var AuthUser  = mongoose.model('AuthUser', authUserSchema);
var User = mongoose.model('User', userSchema);

Upvotes: 5

Related Questions