2015-08-14 10 views
7

aşağıdaki belge yapısı ile bir veritabanı var:node.js - MongoError: sorgusu meşrulaştırılmaz Can: BADVALUE kötü düzen dizisi [2]

{ 
    "_id" : ObjectId("520bea012ab230549e749cff"), 
    "Day" : 1, 
    "Time" : 54, 
    "State" : "Vermont", 
    "Airport" : "BTV", 
    "Temperature" : 39, 
    "Humidity" : 57, 
    "Wind Speed" : 6, 
    "Wind Direction" : 170, 
    "Station Pressure" : 29.6, 
    "Sea Level Pressure" : 150 
} 

En yüksek 'Sıcaklık' için bulmalıyız her 'Devlet' (ieeg orada 100 belge 'Devlet' ile şunlardır: 'Vermont') ve giriş 'month_high' ekleyin: true Bu belgeye (yani en yüksek sıcaklığa sahiptir) İşte

benim kodudur: http://pastebin.com/UbACLbSF

Ancak, programı kabukta çalıştırdığımda şu hatayı alıyorum:

MongoError: Can't canonicalize query: BadValue bad order array [2]

cevap

3

Sen bir dizi, bir nesnenin geçen edilmelidir

cursor.sort({"State": 1, "Temperature": -1}); 
sadece 'Devlet' ve 'Sıcaklık' ihtiyaç
+0

bu varyant hata yükseltir - TypeError: Aslında bu uygulamanın farklı bir bölümünde farklı bir hata var özelliğini null 'Devlet' – Dennis

+0

okunamıyor. Muhtemelen 'Devlet' özelliğine sahip olmayan bir dokümanınız var gibi görünüyor, dolayısıyla bir karşılaştırma yapmaya çalışırken bir hatayla karşılaşırsınız. –

+0

no ... 'State' özelliği her belgede ... Ben kontrol ettim ... Döngüde kod - console.dir (doc) döngüsüne yapıştırdım ve bu belgeyle tüm belgeleri aldım ... anlamaya başlıyorum sorun ... geri çağırma cursor.each 'null' döndürür ... ancak döngü performansını nasıl etkilediğini anlamıyorum ... – Dennis

0

, doğru mu? Bu yüzden sıralamadan önce yansıtmayı deneyin. Aşağıdaki kodu test ettik ve işe yaradı:

var query = {}; 
var projection = { 'State':1, 'Temperature':1 }; 
var options = { 'sort' : [['State',1], ['Temperature',-1]] }; 

var cursor = db.collection('data').find(query, projection, options);