2011-01-12 15 views
8

Ho appena scoperto un comportamento bizzarro esposto da MongoDB."sistema". In un nome raccolta in MongoDB

Apparentemente, qualsiasi nome di raccolta con la stringa "sistema". ovunque in esso non funzionerà correttamente.

Per peggiorare le cose, non ti dirà nemmeno che c'è qualcosa di sbagliato!

È davvero più una questione di curiosità, ma qualcuno ha qualche idea del perché questo potrebbe accadere? È documentato da qualche parte?

La mia ipotesi è che usa "" sistema. *" Collezioni per memorizzare le cose internamente (come indici) e non vuole che tu scherzi con loro, ma questo non sembra come il comportamento corretto per me.

risposta

12

Hai ragione "del sistema. *" è uno spazio dei nomi collezione riservata usata da MongoDB in ogni DB.

e 'usato per memorizzare gli indici e gli utenti, ecc

SQL Server ha molti di questi tavoli troppo, e non credo che ti avvertano di non usarli neanche :)

Ma si può sempre mettere in una richiesta di tale funzionalità: http://jira.mongodb.org/

si possono vedere eseguendo ...

> show collections

e vedrete qualcosa di simile ...

system.indexes

system.users

Quindi, è possibile vedere gli indici, ad esempio:

> db.system.indexes.find()

Dalla documentazione MongoDB:.

Il .System * spazi dei nomi in MongoDB sono speciali e contengono banca dati informazioni di sistema. Sistema collezioni comprendono:

  • system.namespaces elenca tutti i domini.
  • system.indexes elenca tutti gli indici.
  • I metadati di spazio dei nomi/indice aggiuntivi sono presenti nei file database.ns ed è opaco.
  • system.profile memorizza informazioni di profiling del database.
  • system.users elenca gli utenti che possono accedere al database.
  • local.sources memorizza dati e stato di configurazione dello slave di replica.
  • Le informazioni sulla struttura di un oggetto memorizzato vengono memorizzate all'interno dell'oggetto stesso. Vedi BSON.

Ci sono diverse restrizioni al manipolazione degli oggetti nel sistema collezioni. Inserendo in system.indexes aggiunge un indice, ma altrimenti la tabella è immutabile (il comando indice di rilascio speciale lo aggiorna per il valore ). system.users è modificabile. system.profile è trascinabile.

http://docs.mongodb.org/manual/reference/system-collections/

+0

E 'possibile ottenere i record da ogni collezioni come se ho user.primary e user.secondary in quel collezioni Posso selezionare utente in base al nome sia da collezione in una sola volta? – jackyesind

Problemi correlati