MongoDb: Найти объекты только с фильтром даты

В mongodb у меня есть поле даты и времени, например "2018-01-26T16:40:19.305+05:00". Как я буду фильтровать только по сегодняшней дате? Я имею в виду без времени?

Мой документ:

{
    "pk": NumberLong("6585118137"),
    "created_time": ISODate("2018-01-26T16:40:19.305+05:00"),
}

Я хочу что-то вроде

select * from table where date(created_time) = "2018-01-26"

1 ответ

Решение

Мы можем сравнить дату $gtenew Date("2018-01-26") а также $ltnew Date("2018-01-27")

db.col.find( 
    {$expr : 
        { $and: [ { $gte : ["$created_time", new Date("2018-01-26")] }, { $lt : [ "$created_time", new Date("2018-01-27") ] } ] } 
    } 
)

или отформатировать дату в %Y%m%d (yyyyMMdd) и сравните со строкой даты для поиска

db.col.find(
    {$expr : 
        {$eq :
            [{$dateToString: {format: '%Y%m%d',date: "$created_time"}}, "20180126"]
        }
    }
)
Другие вопросы по тегам