4

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.

Pavel Delgado
  • 99
  • 1
  • 10

1 Answers1

5

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);
Stennie
  • 63,885
  • 14
  • 149
  • 175