2015-08-14 33 views
7

我有以下文檔結構的數據庫:的Node.js - MongoError:無法規範化查詢:壞的badValue指令序列[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 
} 

我需要找到最高的「溫度」的每個「國家」(即,例如有100個文件與「國家」:「佛蒙特」),並添加項「month_high」:真到這個文件(具有最高溫)

這裏是我的代碼:http://pastebin.com/UbACLbSF

但是當我在shell中運行程序時,出現以下錯誤:

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

回答

3

你應該傳遞一個對象,而不是一個數組

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

這種變異會引發錯誤 - 類型錯誤:無法讀取屬性空的「國家」 – Dennis

+0

嗯,這是在應用程序的不同部分不同的錯誤。看起來你可能有一個沒有「狀態」屬性的文檔,所以當你試圖進行比較時,你會得到一個錯誤。 –

+0

no ...'State'屬性在每個文檔中...我檢查了它...我在代碼中粘貼了console.dir(doc)並獲取了具有此屬性的所有文檔...似乎我開始理解問題...回調cursor.each返回'null'...但我不明白它是如何影響循環性能的... – Dennis

0

你只需要在「國家」和「溫度」,對不對?所以嘗試在排序之前進行投影。我測試過下面的代碼和它的工作:

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

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