MongoDb:无法优化管道:原因:无法从 BSON 类型 javascript 转换为 Date

Posted

技术标签:

【中文标题】MongoDb:无法优化管道:原因:无法从 BSON 类型 javascript 转换为 Date【英文标题】:MongoDb : Failed to optimize pipeline : caused by : can't convert from BSON type javascript to Date 【发布时间】:2020-10-23 02:25:29 【问题描述】:

我在 Mongo 中有以下数据,并尝试按天对搜索进行分组。所以我知道每天发生多少次搜索


    "_id" : ObjectId("5ee3ebb8a18fae0001cdf0c6"),
    "term" : "wp-login.php",
    "Date" : ISODate("2020-06-12T20:55:20.335Z")

我有以下问题

db.search.aggregate(
  
    $project: 
      year: $year: Date,
      month: $month: Date,
      dayOfMonth: $dayOfMonth: Date
    
  ,
  
    $group: 
      _id: 
        year: '$year',
        month: '$month',
        dayOfMonth: '$dayOfMonth'
      ,
      count: 
        $sum: 1
      
    
  
)

我收到以下错误

执行脚本失败。

错误:命令失败:“ok”:0,“errmsg”:“优化失败 管道 :: 导致 :: 无法从 BSON 类型的 javascript 转换为 日期”,“代码”:16006,“代码名称”:“Location16006”:聚合 失败详情: _getErrorWithCode@src/mongo/shell/utils.js:25:13 doassert@src/mongo/shell/assert.js:18:14 _assertCommandWorked@src/mongo/shell/assert.js:534:17 assert.commandWorked@src/mongo/shell/assert.js:618:16 DB.prototype._runAggregate@src/mongo/shell/db.js:260:9 DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1062:12 DBCollection.prototype.aggregate@:1:355 @(shell):1:1

【问题讨论】:

【参考方案1】:

使用 "$Date" 代替 日期

db.collection.aggregate(
  $project: 
    year: 
      $year: "$Date"
    ,
    month: 
      $month: "$Date"
    ,
    dayOfMonth: 
      $dayOfMonth: "$Date"
    
  
,

  $group: 
    _id: 
      year: "$year",
      month: "$month",
      dayOfMonth: "$dayOfMonth"
    ,
    count: 
      $sum: 1
    
  
)

你可以参考例子here

【讨论】:

以上是关于MongoDb:无法优化管道:原因:无法从 BSON 类型 javascript 转换为 Date的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法读取未定义的属性“findOne”

优化算法头脑风暴优化算法(BSO)含Matlab源码 497期

fgets 无法在 Ubuntu 20.04 上从管道读取两次

MATLAB实战系列(二十九)-头脑风暴优化(BSO)算法求解旅行商问题(TSP)-交叉算子

Mongodb 聚合管道优化 - $match 的 2 阶段

如何在MongoDB中从某些类别中查找特定文档