Алишер Абдуллаев
чет выводит пустой массив
Slava
Алишер Абдуллаев
Алишер Абдуллаев
Slava
А createdAt у вас в ISODate?
Алишер Абдуллаев
Алишер Абдуллаев
Slava
Попробуйте так запрос сделать: { gte: ISODate(«ваша дата»)
Slava
Я с телефона поэтому неудобно весь запрос набрать
Алишер Абдуллаев
Алишер Абдуллаев
Leonid
В обьекте строка исошная. А не обьект типа даты
Leonid
Почему?
Алишер Абдуллаев
Leonid
Обычно даты в монге хранятся как
{
"CreatedAt": ISODate("2020-01-10T21:22:22.0000")
}
Leonid
А в вашем примере просто строка.
И соответственно когда вы ищите у вас применяется текстовое сравнение
Алишер Абдуллаев
Алишер Абдуллаев
Leonid
🤷♂
Алишер Абдуллаев
🤷♂
а есть ли кроме $match , куда можно записать ?
Leonid
А почему ищите по createdAt если нужно по "cretedAt.$date": {}
Алишер Абдуллаев
Leonid
Что то не так с вторым аргументом функции
Алишер Абдуллаев
Алишер Абдуллаев
чтоб $project не трогать )
Leonid
Не понял ворроса
Leonid
Сам запрос или хранение таймштампа?
Алишер Абдуллаев
например в aggregation использовать $and вместо $match
Leonid
См пункт Array Field Limitations
Leonid
Только один $ в прожекте
Алишер Абдуллаев
благодарю @Dr_klo за советы!
Leonid
👍
Никита
Murena
Всем привет - подскажите мне нужно сделать логику - которая сможет создавать копии документов - изменяя владельца документа (пользователя). Можно ли как то в монге делать итерированный find() чтоб не выкачивать сначала все - и потом по этому массиву проходится - а чтоб монга отдавала результаты по одному - чтоб можно было их обрабатывать (выкачивать) по очереди и переходить к следущему. Как вариант можно просто забрать с монги все id документов и потом просто по очереди по ним проходится - но может есть еще какой то вариант ?
Yʉri 🇺🇦
Yʉri 🇺🇦
Алишер Абдуллаев
@Dr_klo здравствтуйте. new Date().toISOString() тоже самое что и содержимое в таймстемп
Алишер Абдуллаев
как правильно записать ?
Leonid
как бы да. это строковое представление даты в международном формате
Leonid
как правильно записать ?
ха, оказывается запись
createdAt: {$date: "2020-01-28T16:03:25.991Z"}
эквивалентно
"createdAt" : ISODate("2020-01-28T16:03:25.991Z")
Получается ваша аггрегация должна выглядеть так:
{
$match: {
"createdAt" : {$gte: ISODate("2020-01-28T00:00:00.000Z"), $lte: ISODate("2020-01-29T00:00:00.000Z")}
}
}
Leonid
не знал что монга так под капотом дату хранит
Алишер Абдуллаев
Leonid
👍
Алишер Абдуллаев
🙏💪
Artem
Есть проблема, коллекция выборка в которой идет по трех полях которые в одном индексе,
но сортировка идет по _id
с сортировкой запрос отрабатывает 4 сек а без пол секунды
db.messages.aggregate([
{
"$match": {
$and: [
{contact_id: ObjectId('5def685dd7b8163e855b70c9')},
{user_id: 7121586},
{bot_id: ObjectId('5def685c5d685a41d6123a67')}
]
}
},
{
$sort: {_id: -1}
},
])
Leonid
Artem
db.getCollection("messages").createIndex({ "bot_id": 1, "contact_id": 1, "user_id": 1 })
Leonid
тебе нужно добавить в индекс _id
Leonid
у тебя происзодит idx_scan, после чего происходит фетч всей коллекции (результата) в ОЗУ, и потом in-memory sort. отсюда такая задержка
Leonid
причем в твоем случае нужно _id добавить в конец индекса, что бы был поиск по префексу индекса
Artem
ок спасибо
Artem
сейчас попробую
Leonid
👍
Artem
Сработало, большое спасибо
Гена
@dd_bb Добрый день, подскажите, если смотреть в логах монгоса, запросы, которые долго бегут, это реальное вермя ответа запроса или стоит смотреть в шардах?
Leonid
думаю монгос будет точнее. т.к. он занимается еще и аггрегированием запросов с нескольких шардов.
Но я не уверен
Гена
просто по непонятным причинам подскочило время ответа в какой-то момент, выстрелило, пытаюсь почему так вышло
По логам запрос отрабатывает аж за 5сек, запрос find. И индекс юзается id
Leonid
бага не воспроизводится?
Гена
нет
Гена
просто был скачек времени ответа
Leonid
такое может быть, когда на одной из нод отвалилась сетка, все шарды вернули результат кроме одной, демон ожидал пока отвалившаяся нода расчехлится и отдаст результат
Гена
и сейчас анализирем по логам
Leonid
проверьте стату по шардам. если юзаете профайлер, посмотрите там долгие запросы. ну или по логам.
Если каждая из нод корректно отработала, то остается либо сетевые задержки или глюк самого демона mongos
yopp
yopp
Смотрите на каждом шарде
Гена
вот откуда вопрос возник
yopp
Он по чьей версии бежал 5 секунд?
yopp
Это один раз произошло?
Гена
вроде 3 насчитал. Но вооббще в этот промежуток неболший (10-15 минут) по монгосу время ответа почти стабильно держится на 1-2 секундах, иногда спадает до нормы а иногда скачет.
Вообще не понимаю в чем дело
yopp
yopp