Ilya
а как он понимает где они выступают как группировка а где как массив ?
Araik
понятия не имею честно говоря
Araik
по порядку наверное
Ilya
текстом свой запрсо скопируйте
Araik
$cursor = $collection->aggregate([ ['$match' => ['created_at' => [ '$and' => ['$gte' => $start, '$lte' => $end]]]], ['$group' => ['_id' => '$status', 'count' => ['$sum' => 1]]], ['$limit' => 5], ]);
Ilya
а еще почему у вас gte и lte в монге же просто gt lt? это тоже фишка пхп?
Araik
Эм..в доках видел оО, я думал это типа включительно или нет
Ilya
ааа
Ilya
это я уже
Ilya
$cursor = $collection->aggregate([ ['$match' => ['$and' => [['$gte' => $start], ['$lte' => $end]]]], ['$group' => ['_id' => '$status', 'count' => ['$sum' => 1]]], ['$limit' => 5], ]);
Ilya
попробуйте так,
Araik
не, так тоже не получилось
Araik
unknown top level operator
Araik
еще непонятно, как он узнает по какому полю выборку делать
Ilya
тьфу
Araik
мне надо выборку по полю created_at сделать и посчитать\сгрупировать по полю status
Ilya
ща
Ilya
$cursor = $collection->aggregate([ ['$match' => ['created_at' => ['$and' => [['$gte' => $start], ['$lte' => $end]]]]], ['$group' => ['_id' => '$status', 'count' => ['$sum' => 1]]], ['$limit' => 5], ]);
Ilya
?
Araik
не, не понимает, unknown operator: $and
Araik
вот так пробовал тоже, но ругается, говорит $and массивом должен быть, а он типа не массив почему-то
Ilya
я не знаю как в пхп сказать что масссив - может там слово array надо или еще как
Araik
не, там и скобки это массив и array() тоже массив, тут дело не в этом
Araik
хотя я со вчера не спал конечно, может торможу немного, но все корректно вроде с точки зрения пхп
Daniil
не, там и скобки это массив и array() тоже массив, тут дело не в этом
операторы верхнего уровня - match, group и limit - должны быть в объект обернуты
Daniil
не знаю как на пхп делать объекты правда
Daniil
то есть в аггрегейшн должен попасть массив объектов, типа - aggregate([ { $match: … }, { $group: … }, { $limit: …} ])
Araik
не, в пхп там массивы идут
Araik
function aggregate(array $pipeline, array $options = []): Traversable
Daniil
понял
Daniil
мб and должен принимать массив, а он как будто принимает два массива через запятую
Daniil
т.е. сейчас так - and => [], [] а мб надо and => [[], []]
Araik
ну, именно так я пробовал, но мне кажется мысль в верном направлении, потому что, если раньше, он ругался, что не знает, что за $end, то сейчас хочет массив
Daniil
ну проблема точно в синтаксисе описания запроса)
Daniil
но как именно должно быть это написано на пхп я не знаю точно)
Araik
я думаю, я близок к тому, чтобы сделать find, а расчеты уже на пыхе сделать)))
Daniil
один раз надо разобраться, чтобы потом юзать, аггрегэйт очень полезная штука, много где потом пригодиться может
Araik
согласен, если честно, мое предыдущее сообщение скорее из отчаяния))
Dmitriy
если $lte не указывать, то все ок
А какие у вас значения в переменных start/end? Очень похоже на то что у вас просто выборка ничего не возвращает по вашим условиям
Araik
Не, там все ок
Araik
new \MongoDB\BSON\UTCDateTime(strtotime('2020-03-01'));
Araik
Но я что обнаружил, aggregate как и find работают, только если $gte указывать, как только указываю $lte перестают оба работать
Araik
но я смотрю по интернетам и такой же синтаксис работает у других, вообще не понимаю, что не так https://stackoverflow.com/questions/35103907/multiple-match-in-php-mongo-aggregate
Dmitriy
new \MongoDB\BSON\UTCDateTime(strtotime('2020-03-01'));
Это значение какого поля?
Araik
$end
Dmitriy
А у start какое значение?
Araik
но я экспериментировал с этими переменными, и одинаковые ставил и т.д.
Araik
2020-03-01
Araik
в нужном формате
Dmitriy
А теперь смотрите вы ставите, что у вас выборка должна быть больше или равна 2020-03-01 00:00:00 (т.к. вы не указываете интервал в часах внутри даты) и меньше или равна 2020-03-01 00:00:00 (т.к. вы не указываете интервал в часах внутри даты)
Dmitriy
У вас реально есть записи в базе созданные в эту секунду?
Araik
не корректно написал, я пробовал и выборки с интервалом в месяц, результат тот же, но сейчас еще раз попробую
Araik
без изменений
Araik
за этот промежуток точно несколько тысяч записей есть
Araik
блин, это реально у всех работает, кроме меня, я непонимаю)) https://stackoverflow.com/questions/13352302/mongodb-search-using-a-date-range-and-another-condition
yopp
за этот промежуток точно несколько тысяч записей есть
проверьте что запрос в монгу генрируется с правильной датой
Araik
проверял, корректно все
yopp
покажите, пожалуйста, запрос который генерирует ваш драйвер
Dmitriy
без изменений
Почитал за вас доку)
Dmitriy
Dmitriy
Dmitriy
1) конструктор ждёт миллисекунды. strtotime возвращает секунды 2) первый же коммент в доке об этом
Araik
😱🤯😅
Araik
вот блин подстава то какая неожиданная))
Araik
Спасибо парни!))
Araik
я думал после new \MongoDB\BSON\UTCDateTime уже в нужном формате все, чтобы не было на входе
Dmitriy
Так не бывает) ну либо это какой-то жуткий генерик) все таки методы (функции) ожадают данных в определённом формате\типе, а не абы что
Araik
согласен, моя невнимательность, сбило с толку, что с $gte запрос проходил
Ilya
@dd_bb
Deadsanta
О чем тут речь?)люди добрые
Artem
А можно в mongodb послать запрос и не дожидаться ответа
Artem
?
Artem
на insert or update
Ilya
если ваш ЯП это позволяет то почему нет
yopp
А можно в mongodb послать запрос и не дожидаться ответа
Да, используя w: 0, но гарантии что запрос будет выполнен нет
yopp
Это через опшенс writeConcern ?
https://docs.mongodb.com/manual/reference/write-concern/#acknowledgment-behavior
Ilya
День добрый, вопрос: Повторяется ли монго id в разных коллекциях?