【问题标题】:node.js - MongoError: Can't canonicalize query: BadValue bad order array [2]node.js - MongoError:无法规范化查询:BadValue 错误顺序数组 [2]
【发布时间】:2015-11-08 01:05:07
【问题描述】:

我有一个具有以下文档结构的数据库:

{
    "_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 个带有 'State':'Vermont' 的文档)并将条目 'month_high':true 添加到此文档中(具有最高温度)

这是我的代码:http://pastebin.com/UbACLbSF

但是当我在 shell 中运行程序时,出现以下错误:

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

【问题讨论】:

    标签: node.js mongodb node-mongodb-native


    【解决方案1】:

    你应该传入一个对象,而不是一个数组

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

    【讨论】:

    • 此变体引发错误 - TypeError: Cannot read property 'State' of null
    • 嗯,这是应用程序不同部分的不同错误。看起来您可能有一个没有“状态”属性的文档,因此当您尝试执行比较时会出现错误。
    • no...'State' 属性在每个文档中...我检查了...我在循环中粘贴了代码-console.dir(doc) 并获取了具有此属性的所有文档。 ..似乎我开始理解问题了...回调 cursor.each 返回“null”...但我不明白它如何影响循环性能...
    • 这个关于 Node.js 驱动程序的答案是错误的。您需要使用数组和 not json 对象来保持排序顺序。 documentation这个不是很清楚,但是this官方教程视频是。
    【解决方案2】:

    您只需要“状态”和“温度”,对吗?所以在排序之前尝试投影它。我已经测试了以下代码并且它有效:

    var query = {};
    var projection = { 'State':1, 'Temperature':1 };
    var options = { 'sort' : [['State',1], ['Temperature',-1]] };
    
    var cursor = db.collection('data').find(query, projection, options);
    

    【讨论】:

      猜你喜欢
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      相关资源
      最近更新 更多