find by date in mongoDB

45 views
Skip to first unread message

Евгений Марьев

unread,
Oct 7, 2019, 3:51:49 AM10/7/19
to Golang Russian
Всем привет, никак не могу разобраться как мне сделать выборку по дате из mongoDB.
Вот код пакета работы с базой:
Вот код для метода search:
При попытке искать так:
{
 
"site": "eplaza",
 
"date_to": "2019-10-06"
}
возвращает пустоту, если убрать date_to, то возвращает все записи по фильтру site.

Alex Lurye

unread,
Oct 7, 2019, 4:37:35 AM10/7/19
to Golang Russian
Я не специалист в монге и не знаю, что именно вы в приложении хотите сделать, но похоже, что запрос date_to=2019-10-06 выдаст вам даты, строго меньшие чем 6 октября, т.е. до 5 октября. Может в этом проблема? Если нет, то распечатайте запрос к монге, который у вас получается, прям в том месте, где вы его отправляете, и если он корректный, то вам имеет смысл спросить в монго-группах, как заставить её работать.

По Go коду, раз уж вы его запостили:
1. не используйте type assertions применительно к недоверенному вводу. Например, dateFrom.(string) запаникует, если вместо строки вам передадут число, и программа упадёт.
Надо писать так: "dateFrom, fromOk := filter["date_from"].(string)", и в этом случае если уж fromOk будет истинным, то dateFrom будет содержать строку без всяких вариантов.
2. не разрывайте длинные строки, только ради того, чтобы влезть в 80 колонок. https://github.com/golang/go/wiki/CodeReviewComments#line-length
3. не везде аккуратно проверяются ошибки. Например тут первая ошибка игнорируется:
from, err = time.Parse(dateLayout, dateFrom.(string))
to, err = time.Parse(dateLayout, dateFrom.(string))
4. сокращения (такие как OK) надо писать или большими буквами целиком, или маленькими. https://github.com/golang/go/wiki/CodeReviewComments#initialisms
5. глобальная переменная data, к которой привязаны методы - это что-то очень странное. Если вы её модифицируете каждый раз, когда делаете запись в лог, делать этого из нескольких горутин уже нельзя будет - у вас будет data races и случайные повреждения данных или краши всей программы.
6. (вкусовщина) По-моему, вы немного злоупотребляете named return values. Каждый раз, когда функция делает return, приходится искать глазами и анализировать программу, чтобы понять, что же она вернёт.


--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/golang-ru/ca07c55c-2c8d-43bd-a7d0-e29b34ccc68b%40googlegroups.com.

Евгений Марьев

unread,
Oct 7, 2019, 7:18:52 AM10/7/19
to Golang Russian
Благодарю за ответ, внес изменение в код, согласно рекомендациям.

понедельник, 7 октября 2019 г., 12:37:35 UTC+4 пользователь Alex Lurye написал:
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес gola...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages