2015-08-14 6 views
7

Mam bazę danych o następującej strukturze dokumentu:node.js - MongoError: nie można kanonicznej zapytanie: BADVALUE zła kolejność tablica [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 
} 

Muszę znaleźć Najwyższego „Temperature” dla każdy „państwo” (ieeg istnieje 100 dokument z „państwo”: „Vermont”) i dodać zapis „month_high”: true w niniejszym dokumencie (który ma najbardziej wysoką temperaturę)

Oto mój kod: http://pastebin.com/UbACLbSF

Ale po uruchomieniu programu w powłoce otrzymuję następujący błąd:

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

Odpowiedz

3

powinien być przechodzącą w obiekcie, a nie tablicą

cursor.sort({"State": 1, "Temperature": -1}); 
+0

ten wariant podnosi błąd - TypeError: nie można odczytać właściwość „państwo” null – Dennis

+0

Dobrze, że jest inny błąd w innej części wniosku. Wygląda na to, że prawdopodobnie masz dokument, który nie ma właściwości "Stan", więc gdy próbujesz wykonać porównanie, pojawia się błąd. –

+0

no ... Właściwość "stan" jest w każdym dokumencie ... Sprawdziłem ... Wkleiłem kod - console.dir (doc) w cyklu i otrzymałem wszystkie dokumenty z tą właściwością ... wydaje się, że zaczynam rozumieć problemu ... callback cursor.each zwraca 'null' ... ale nie rozumiem, jak wpływa to na wydajność pętli ... – Dennis

0

Wystarczy „państwo” i „Temperatura”, prawda? Więc spróbuj wykonać rzut przed sortowaniem. Przetestowałem poniższy kod i to działało:

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

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