2013-08-29 13 views
15

I MongoDB documentation stati:Come si può specificare l'ordine delle proprietà in un oggetto javascript per un indice MongoDB in node.js?

Per gli indici con più di una chiave (cioè indici composti) la sequenza di campi è importante.

Ma ECMAScript definisce un oggetto come segue:

Un oggetto è un membro del tipo oggetto. È una raccolta non ordinata di proprietà ognuna delle quali contiene un valore, un oggetto o una funzione primitivi.

Quando si utilizza MongoDB a node.js (ad esempio utilizzando this module), si sta utilizzando JavaScript lato server, come nell'esempio qui sotto.

Come si specifica una sequenza quando MongoDB prevede un object (raccolta non ordinata di proprietà AKA)?

collection.ensureIndex({ 
    date : -1, 
    client : 1, 
    product : 1 
}); 
+0

Non mi preoccuperei della proprietà "non ordinata" di JavaScript perché hanno implementato la propria versione di js per la shell. Prova 'mostra dbs' e vedrai cosa intendo. –

+0

Spiacente, ho dimenticato di menzionare Node.js (javascript) come linguaggio di scripting. – Redsandro

+1

Le proprietà potrebbero non essere in pratica necessariamente così non ordinate, in quanto le specifiche ECMA impongono che esse * potrebbero * essere (http://jsfiddle.net/D4zC8/2/). In Chrome e IE 10, l'ordine delle chiavi è coerente lì. Non mi sorprenderebbe troppo se un nuovo letterale di oggetti freschi si comportasse in quel modo in tutte le principali implementazioni. Sembra piuttosto folle a rilasciare il codice basandosi su quel comportamento, però. In Chrome, se elimino una proprietà e la sostituisco, l'ordine della chiave cambia. In IE10, non è così. –

risposta

9

Nel MongoDB, l'ordine dei campi in un documento è davvero significativo, e tutti i driver lingua forniscono un mezzo per specificare i documenti in questo modo, anche se il linguaggio di programmazione di base non ha un tale concetto.

Il formato di documento che MongoDB utilizza nella sua shell è JSON simile a JSON ma non rigoroso. Tra l'altro, l'ordine dei campi è sempre preservato.

In Javascript, lo standard definisce i campi come non ordinati, quindi le implementazioni sono libere di ignorare/non conservare l'ordine. Ma in pratica, , tutte le implementazioni mantengono l'ordine. In particolare il V8 engine conserva l'ordine, che è il motore utilizzato in node.js quindi non c'è problema.

+0

Ho dimenticato di menzionare che si tratta di usare 'MongoDB' in' Node.js' che è javascript lato server. Quindi le mie preoccupazioni non riguardano il modo in cui Mongo lo gestisce internamente, ma la parte javascript. – Redsandro

+3

Il motore V8 conserva effettivamente l'ordine, sebbene sia definito come non ordinato nello standard. Quella è un'area grigia che al momento sembra essere gestita abbastanza bene (perché tutti gli ambienti essenzialmente preservano l'ordinamento), ma potrebbe essere necessario esaminare più da vicino in futuro. – drmirror

+0

Alcuni test mostrano che V8 preserva questo ordine in ogni momento. Dovresti modificare il tuo commento nella tua risposta e io lo accetterò. – Redsandro