代码之家  ›  专栏  ›  技术社区  ›  Kolban

带$匹配和日期比较的聚合拼图

  •  1
  • Kolban  · 技术社区  · 8 年前

    我有一个比较日期的难题。我创建了一个简化的故事来帮助说明。设想以下文档集合:

    { 
        "_id" : "A", 
        "t1" : ISODate("2018-01-23T00:00:00.000+0000")
    }
    { 
        "_id" : "B", 
        "t1" : ISODate("2018-01-22T00:00:00.000+0000")
    }
    { 
        "_id" : "C", 
        "t1" : ISODate("2018-01-21T00:00:00.000+0000")
    }
    

    这是三份日期为2018年的文件。

    现在想象一个聚合 $match 如下所示的条目:

    {
      $match:
      {
        "t1": {
          $gte: {
            $dateFromString: {
              dateString: "2017-02-08T12:10:40"
            }
          }
        }
      }
    }
    

    这应该做的是匹配所有文档,因为我比较的日期是2017年。然而,我发现没有匹配的文档。这是聚合管道中的第一个阶段,但没有向前传递任何文档,当前故事到此结束。

    有人能看出我可能出了什么问题吗?

    2 回复  |  直到 8 年前
        1
  •  2
  •   s7vr    8 年前

    你必须使用 $expr (3.6 mongo版本)使用聚合函数( dateFromString )在$匹配阶段$简单形式的match仅支持查询运算符。

    比较 query operators vs公司 aggregation comparison operators .

    更改为

    {"$match":{"$expr":{"$gte":["$t1",{"$dateFromString":{"dateString":"2017-02-08T12:10:40"}}]}}}
    
        2
  •  0
  •   paparoch    7 年前

    查看此npm模块: https://www.npmjs.com/package/mongodb-extended-json 它会自动将{“$date”:“2016-01-01T00:00:00.000Z”}转换为日期对象

    推荐文章