如何在mongodb-haskell聚合查询中包含当前日期

时间:2014-11-28 09:31:12

标签: mongodb haskell aggregation-framework

我正在使用MongoDB Haskell包(http://hackage.haskell.org/package/mongoDB)并尝试编写一个使用当前日期的聚合查询。我可以用Haskell的getCurrentTime做到这一点,但也应该可以让MongoDB直接使用当前日期。

似乎包含具有BSON类型Date的字段的唯一方法是使用Haskell UTC构造函数并从haskell传递UTCTime。

有没有办法让类似下面的东西工作?

getNotes :: Action IO [Document]
getNotes = aggregate "delivery_notes"
  [ "$match" =: [ "delivery_date" =: [ "$lte" =:  "$currentDate" ]
                , "delivery_date" =: [ "$lte" =: (Javascript [] "new Date()")]
                ]
  ]

1 个答案:

答案 0 :(得分:0)

在纯JS中编写可以在查询中直接包含new Date()语句,但是使用Haskell mongoDB库我最终在getCurrentTime库中包含time

getNotes :: Action IO [Document]
getNotes = do
  t <- liftIO $ getCurrentTime
  aggregate "delivery_notes"
    [ "$match" =: [ "delivery_date" =: [ "$lte" =:  "$currentDate" ]
    , "delivery_date" =: [ "$lte" =: String (formatDateTime t)]
                         ]
    ]

formatDateTime :: UTCTime -> Text
formatDateTime = tshow . formatTime defaultTimeLocale "%F %R"