2013-08-29 16 views
15

MongoDB documentation ifade eder: birden fazla anahtar (yani bileşik endeksleri) ile indekslerindenode.js'de MongoDB dizini için bir javascript nesnesindeki özelliklerin sırasını nasıl belirtebilirsiniz?

alanların sırası önemlidir.

Ancak şu şekilde ECMAScript bir nesneyi tanımlamaktadır:

bir amacı, bir nesne türü bir üyesidir. Her biri ilkel bir değer, nesne veya işlev içeren özelliklerinin sırasız bir koleksiyonudur.

aşağıdaki örnekte olduğu gibi, sunucu tarafı javascript kullanıyoruz, (this module kullanarak örneğin) node.js içinde MongoDB kullanarak. MongoDB bir object (özelliklerin AKA sırasız topluluğu) beklediği zaman

Nasıl bir diziyi belirtebilirim? MongoDB yılında

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

JavaScript'in "sırasız" özelliğinden endişe etmem çünkü kabuk için kendi js sürümlerini uyguladıkları için. Dbs'yi göstermeyi deneyin ve ne demek istediğimi göreceksiniz. –

+0

Maalesef, komut dosyası dili olarak Node.js'yi (javascript) belirtmeyi unuttum. – Redsandro

+1

ECMA spesifikasyonları, * olabileceğine (http://jsfiddle.net/D4zC8/2/) karar verdiğinden, bu özellikler uygulamada olduğu kadar zorunlu olmayabilir. Chrome ve IE 10’da, anahtar düzen burada tutarlıdır. Yeni bir yeni nesnesinin, tüm büyük uygulamalarda bu şekilde davrandığında beni çok şaşırtmayacaktı. Yine de, bu davranışa güvenerek kod yayınlamak oldukça çılgın görünüyor. Chrome'da, bir mülkü silip değiştirirseniz, anahtar sırası değişir. IE10'da değil. –

cevap

9

, bir belgede alanların sırası gerçekten önemli olduğunu ve tüm dil sürücüleri yatan programlama dili böyle bir kavram yoktur bile yolu, belgeleri belirterek bir araç sağlamaktadır. MongoDB kabuğundan kullandığı

belge biçimi sıkı JSON JSON benzeri ama değil. Diğer şeylerin yanı sıra, alanların sırası her zaman korunur.

JavaScript yılında standart sırasız olarak alanları tanımlayan, böylece uygulamalar sipariş korumaz/görmezden serbesttir. Ancak uygulamada , tüm uygulamalar siparişi koruyor. Özellikle V8 engine, node.js'da kullanılan motorun siparişini koruyor, bu yüzden sorun değil.

+0

Bunun, sunucu tarafında javascript olan 'Node.js'de' MongoDB' kullanımı ile ilgili olduğundan bahsetmeyi unuttum. Bu yüzden endişelerim Mongo'nun içsel olarak nasıl işlediği değil, javascript kısmı. – Redsandro

+3

V8 motoru, standartta sırasız olarak tanımlanmış olmasına rağmen gerçekten siparişi koruyor. Bu, şu anda yeterince iyi ele alınmış gibi görünen gri bir alandır (çünkü tüm ortamlar esasen siparişleri korur), ancak gelecekte daha yakından bakılması gerekebilir. – drmirror

+0

Bazı testler, V8'in bu siparişi her zaman koruduğunu gösteriyor. Yorumunuzu cevabınıza göre düzenlemelisiniz ve kabul edeceğim. – Redsandro