Come hai scoperto, gli indici secondari non sono supportati nelle raccolte di sistema come local.oplog.rs
e *.system.profile
. In MongoDB 2.4 e versioni precedenti gli indici sembrano essere stati creati, ma non sono mai stati effettivamente aggiornati. Le versioni più recenti di MongoDB (2.6+) restituiscono un errore se si tenta di aggiornare direttamente una raccolta di sistema con una modifica non supportata come il tentativo di creare indici aggiuntivi.
Il oplog.rs
la collezione è decisamente "speciale" perché la sua destinazione d'uso è solo per la replica. Gli interni di replica fanno alcune ipotesi sulle operazioni previste per l'oplog su questa base. Ad esempio, la replica deve solo inserire voci oplog -- a differenza di una raccolta limitata che puoi creare tu stesso, le voci oplog sono mai aggiornato.
Le applicazioni dovrebbero leggere l'oplog con un cursore a coda se hanno bisogno di seguire le nuove voci che vengono inserite nell'oplog, o di trovare usando $natural
ordine.
Il tutorial del cursore tailable entra in qualche dettaglio in più sull'utilizzo, ma alcuni punti particolari da notare sono:
- I cursori a coda non utilizzano gli indici e restituiscono i documenti in ordine naturale.
- Poiché i cursori a coda non utilizzano gli indici, la scansione iniziale della query potrebbe essere costosa; ma, dopo aver esaurito inizialmente il cursore, i successivi recuperi dei nuovi documenti aggiunti sono poco costosi