2015-08-14 31 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);