2014-11-28 2 views
1

Я использую пакет MongoDB Haskell (http://hackage.haskell.org/package/mongoDB) и пытаюсь написать запрос агрегирования, который использует текущую дату. Я могу сделать это с помощью getCurrentTime Haskell, но также можно позволить MongoDB напрямую использовать текущую дату.Как включить текущую дату в запрос агрегации mongodb-haskell

Кажется, что единственный способ включить поле с типом BSON Date - это использовать конструктор UTC Haskell и передать UTCTime из haskell.

Нет ли способа заставить что-то похожее на следующее работать?

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

ответ

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"