Nick
Anonymous
ISODate("2018-05-28T18:19:16.211Z")
Anonymous
я сейчас на сервер UTC поставил, чтобы совпадало
Anonymous
но похоже это не помогло
Anonymous
А нет помогло)
Anonymous
Спасибо))
Alexander
Всем привет. Подскажите, плиз, есть коллекция: { _id: ..., author: '...', text: '...' }
как сделать выборку с группировкай по автору?
Nick
Nick
тогда вам в aggregation и там соотвественно group
Viktor
доброго времени суток, на реплика-сете стоит монга 3.4.3, могу ли я безопасно отсоединять от реплики по одному серверу и апгрейдить их до 3.4.15?
Viktor
т.е. отсоединил, обновил и сразу заново в реплика сет подключил инстанс
SvPupok
а зечем отсоединять?
SvPupok
остановил репликацию, погасил софт, обновил, запустил
Анатолий
Привет! Кто может подсказать почему если указать в db.collection.find().skip(3400) - запрос начинает долго висеть и выбирает 100000 документов. А всего их 3600?
Анатолий
точнее будет сказать что в запросе идут limit(20).skip(3400) - т.е. я делаю пагинацию/постраничку
Nick
сначала скип потом лимит
Анатолий
нету разницы. всё равно находит больше результатов чем их есть
Анатолий
какая-то хрень =(
Анатолий
в db.currentOp() - numYields это не количество результатов?
yopp
Анатолий
в find 3600 запросов
Анатолий
а когда делаю find.skip.limit - зависает и numYields растет
Анатолий
если я правильно понимаю explain - почему то идёт по всем документам в коллекции вообще
Анатолий
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 20,
"executionTimeMillis" : 1509937,
"totalKeysExamined" : 19542300,
"totalDocsExamined" : 19542300,
yopp
Ну да. А как вы ещё ожидаете будет работать skip и limit без индекса?
Анатолий
а почему на обычный find не делает такое?
Анатолий
и когда skip маленький - тоже не делает
Анатолий
а когда на последнюю страницу в постраничной навигации кликаешь - начинается такая хрень
Nick
а какое услвоие в самом find?
yopp
а почему на обычный find не делает такое?
Потому что find возвращает курсор. Find без условий открывает курсор с $natural сортировкой без условий.
Если вы не итерируете курсор, то такой запрос будет выполнятся быстро, потому что это начало списка. Чем ближе к концу, тем больше документов надо перебрать.
yopp
Добавление skip просто автоматически проматывает курсор вперёд на X документов
Анатолий
у меня find с сортировкой
Анатолий
когда делаю count - сразу возвращает сколько результатов - 3600
Анатолий
получается, если сделать skip - то он начнет искать по всей коллекции?
Анатолий
не смотря на то что уже нашел эти 3600?
yopp
Я не понимаю что вы говорите
Анатолий
вот find нашел 3600 записей по индексу
yopp
Приведите примеры запросов, так будет проще.
Анатолий
получается мне проще просто итерировать эти записи скажем в php, чем делать skip в mongodb?
yopp
Анатолий
db.collection.find({"extra.sessid":{"$in":["31723acf50a0148d575124d44c7bdb95","be6d00ae71209fdc00b22cf31cfbd908","5cbf8d0072da6956bfc8277e3ecd4ccb","1c27187cc0384a4a84aef9e5e56becb4"]}}, {"datetime" : 1,"extra.recordNumber" : 1,"action.id" : 1,"level_name" : 1,"extra.sessid" : 1,"extra.userId" : 1,"message" : 1,"context.errorCode" : 1,"context.error" : 1}).sort({'datetime':-1,'extra.ROW_NUM':-1}).skip(3400).limit(20);
Анатолий
вот такой запрос - зависает, и надолго
yopp
А другой какой запрос?
Анатолий
db.collection.find({"extra.sessid":{"$in":["31723acf50a0148d575124d44c7bdb95","be6d00ae71209fdc00b22cf31cfbd908","5cbf8d0072da6956bfc8277e3ecd4ccb","1c27187cc0384a4a84aef9e5e56becb4"]}}, {"datetime" : 1,"extra.recordNumber" : 1,"action.id" : 1,"level_name" : 1,"extra.sessid" : 1,"extra.userId" : 1,"message" : 1,"context.errorCode" : 1,"context.error" : 1}).sort({'datetime':-1,'extra.ROW_NUM':-1});
Анатолий
без скипа и лимита
Анатолий
и он сразу отрабатывает
Nick
ну собсна инндекс по {'datetime':-1,'extra.ROW_NUM':-1}
Nick
и все будет норм
Анатолий
или не сразу. тоже завис походу
yopp
Измеряйте с explain("executionStats")
Анатолий
Анатолий
в коллекции должен быть индекс по фильтру и по сортировке?
Анатолий
или один, которые все поля включает?
yopp
Сделайте оба запроса с explain(executionStats) и сравните планы
yopp
Можете на gist запостить
agic
my $now2 = DateTime->now( time_zone => 'Europe/Moscow' )->subtract(minutes => 15);
agic
my $dt = DateTime->new( year => 2018, month => 5, day => 29, hour => 14, minute => 50 );
agic
dt=2018-05-29T14:50:00
now2=2018-05-29T14:56:19
agic
my $cnt = $users->find({ 'answer.0.results.0.to' => $arg1, 'date' =>{'$gte' => $dt }});
agic
есть две даты ) вывод я показал
agic
далее 1 конутрукция работает корректно
agic
my $cnt = $users->find({ 'answer.0.results.0.to' => $arg1, 'date' =>{'$gte' => $now2}});
agic
не работает
agic
я разницы не вижу
agic
добрый день может есть любители перла
Nick
смущает что в одном случае указывает таймзона в явном виде, можете сделать тоже самое указав например не минус 15 мину, а минус 5 часов?
Nick
ну или минус 3 часа 15 минут, с 5 часами нагляднее будет
Konstantin
У меня такой вопрос, немного не конкретно практический, а более общего плана.
Если пишутся два квери на один и тот же документ, монго это контролирует и выполняет их одну за одной по условиям поиска этих квери на момент их execution, так?
Konstantin
ACID для единичных документов выполнен, я так понимаю и вроде это написано в доках
yopp
Ну почти, да
yopp
Для WT запрос будет выполнятся в снапшоте всей коллекции на момент начала запроса.
Konstantin
Если я пишу bulkWrite (mongoose) то как сделать префлайт проверку, записать в pre скрипт итерации, полла и проверки данных перед каждым выполнением?
yopp
Никак
Konstantin
yopp
Вам даётся гарантия только на один конкретный документ. И эта гарантия только на момент выполнения операции с этим конкретным документом.
yopp
Грубо говоря, монга вам гарантирует что отправленный вами апдейт будет применён к любой текущей версии документа
Konstantin
Каким образом мне оформить интергити моего bulkWrite если вдруг разные процессы апи возможно будут писать на некоторые смежные документы?