Node.js - MongoError:无法规范化查询:BadValue坏的排序数组[2]。

7

我有一个如下所示的文档结构的数据库:

{
    "_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
}

我需要找到每个“州”中最高的“温度”(例如,“Vermont”州有100个文档),并将条目“month_high”:true添加到具有最高温度的文档中。
这是我的代码:http://pastebin.com/UbACLbSF 但是,当我在shell中运行程序时,我收到以下错误:
MongoError:无法规范化查询:BadValue bad order array [2]
2个回答

3
您应该传递一个对象,而不是一个数组。
cursor.sort({"State": 1, "Temperature": -1});

此变量引发错误 - TypeError:无法读取null的属性'State'。 - Dennis
那是应用程序不同部分的另一个错误。看起来你可能有一个没有“State”属性的文档,所以当你尝试进行比较时会出现错误。 - Yuri Zarubin
“State”属性在每个文档中都存在,我已经检查过了。我在循环中粘贴了代码 - console.dir(doc),并获得了所有具有此属性的文档。看来我开始理解问题了。回调游标.each返回“null”,但我不明白它如何影响循环性能。 - Dennis
关于 Node.js 驱动程序,这个答案是错误的。你需要使用数组而不是 JSON 对象来保留排序顺序。这个文档没有说明得很清楚,但是这个官方教程视频说明了。 - Zanon

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接