2012-09-10 13 views
8

Ho raccolte di documenti in mongodb, con la proprietà expireAfterSeconds impostata su un indice di tipo data.Quando un documento mongodb scadrà dopo essere stato aggiornato?

Per ragioni, i documenti scadono dopo un'ora.

Quando aggiorno un documento in questa raccolta, quale dei seguenti accadrà?

a) Il documento scadrà un'ora dopo l'ora di creazione originale.

b) Il documento scadrà un'ora dopo l'aggiornamento tempo.

c) Il documento scadrà un'ora dopo la indicizzato tempo variabili s', qualunque essa sia.

d) Nessuno dei precedenti

Penso che sia c, ma non riesce a trovare il riferimento a confermarlo. Ho ragione? Dove è documentato?

[modifica]: Per chiarire, la situazione è che sto memorizzare i codici di reimpostazione della password (che dovrebbe scadere.) E voglio che i vecchi codici di smettere di funzionare se viene richiesto un nuovo codice. Non è molto rilevante, dal momento che posso garantire che il comportamento che voglio sia sempre rispettato semplicemente cancellando la vecchia transazione. Questa domanda non riguarda il mio problema attuale, ma il comportamento di Mongo.

+0

Sto testando il comportamento al momento. – brice

+1

La durata delle operazioni di rimozione dipende dal carico di lavoro dell'istanza mongod che si sta eseguendo, Potresti per favore elaborare la situazione che stai avendo –

+1

Vedere la risposta aggiornata. La mia situazione attuale è piuttosto irrilevante. Sono consapevole che la rimozione richiederà tempo e il momento esatto dipenderà dal carico. – brice

risposta

15

La risposta corretta è c)

La struttura expireAfterSeconds richiede sempre un indice su un campo che contiene una data BSON, poiché il contenuto di questo campo data viene usato per selezionare le voci per la rimozione.

Quando si desidera aggiornare un documento per reimpostare il time-to-live, aggiornare anche il campo della data indicizzata sull'ora corrente.

Quando si desidera che un aggiornamento non influisca sul TTL, è sufficiente non aggiornare la data.

Tuttavia, tenere presente che expireAfterSeconds non garantisce la cancellazione immediata del documento. Le eliminazioni vengono eseguite da un processo in background che viene eseguito ogni minuto. Questo lavoro ha bassa priorità e può essere posticipato da MongoDB quando il carico attuale è alto. Quindi, quando è importante per il tuo caso di utilizzo che i tempi di scadenza siano rispettati con precisione per il secondo, devi aggiungere un controllo aggiuntivo a livello di applicazione.

Questa funzione è documentato qui: http://docs.mongodb.org/manual/tutorial/expire-data/

+0

Grazie Philipp. È quello che ho pensato, non ho trovato i documenti per essere davvero espliciti su questo però. – brice

+0

Ottima risposta: completa, sintetica. – Ross

0

Se non si vuole fare affidamento su processi demone Mongo per scadenza la raccolta, quindi meglio per creare un campo createdOn supplementare sulla raccolta e confrontarla con il timestamp corrente decidere se utilizzare quel documento o meno.

+0

Questo non è correlato al funzionamento di MongoDB e richiede un'elaborazione esterna (che non rientra nell'ambito della domanda originale). –

Problemi correlati