Anonymous
ну типа да
Anonymous
select all
Nick
agregation framework, group max
Nick
и советую использовать монгошел или каконйить робомонго чтобы играться с запросами к монге, а потом уже переносить их в свой язык. так будет понимание почему так и что искат ьв своем драйвере
Anonymous
спасибо ща какраз попробую в шелле
Anonymous
db.collection.aggregate или db.collection.group ?
Nick
неужели доку прочитать нельзя? Deprecated since version 3.4: Mongodb 3.4 deprecates the db.collection.group() method. Use db.collection.aggregate() with the $group stage or db.collection.mapReduce() instead.
Anonymous
есть и другая проблема. group() can't handle more than 20000 unique keys
Nick
гже это написано?
Anonymous
в получаемом эрроре
Anonymous
ну, надо юзать db.collection.aggregate() with the $group stage
Nick
т.е. вас не смутило явное указание об ограничении на 20к ключей в описании поведения метода group?
Anonymous
в каком смысле?
Anonymous
смутило )
Nick
https://docs.mongodb.com/manual/reference/method/db.collection.group/#behavior
Anonymous
я ошибку получил до того, как открыл )
Nick
предвосхищаю проблему с огранчиение в 100Мб на группировке https://docs.mongodb.com/manual/reference/operator/aggregation/group/#group-operator-and-memory
Anonymous
и такое может быть..
Anonymous
не пойму, а как max всунуть в group ?
Nick
$group : { _id : "$your_id_field", maxValue: { $max: "$some_field" } }
Anonymous
проблемы с объёмом вроде нет )
Anonymous
подскажите пожалуйста ещё если можно, как сделать, чтобы в результате этого запроае присутствовали и все остальные поля?
Anonymous
только перечислять?
Nick
вам нужен груп бай по нескольким полям?
Anonymous
нет
Anonymous
но вывести то я хочу все поля, а этот запрос выведет только два поля
Nick
вы в sql обычный умеете?
Anonymous
немного.
Nick
попробуйте там получить то что требуется
Nick
и киньте запрос результат которого вас устраивает, может получится на монге получить
Anonymous
блин ну ставить его.. там group by не убивает столбцы а выводит все
Nick
нет
Anonymous
меня устраивает тот который вы написали, за исключением того что нет столбцов, нужных мне
Nick
вы указываете все поля по которым группируете и только их можете выдать
Anonymous
блин. а как же выдать остальные
Nick
ну плюс сами поля агрегаций
Nick
либо по ним группировать, либо переосмыслить то что вы хотите дслетаь
Nick
опишите что делаете
Anonymous
попробуйте там получить то что требуется
как я понимаю, такой пример релевантен: select field1, max(field2), field3, field4 from test group by field1;
Anonymous
мм.. нет.
Nick
просто опишите что логически делается
Anonymous
логически - есть таблица с товарами, туда результирующие операции по ним записываются способом добавления (не спрашивайте:) ). То есть актуальная информация по текущему товару находится в той строке, id которой соответствует данному товару и timestamp максимален.
Anonymous
хочу получить актуальную таблицу товаров (уникальные id + макс по таймстемпу
Anonymous
я исправил пример, вот так: select product_id, max(timestamp), field3, field4 from test group by product_id;
Anonymous
вроде это оно
Nick
а остальные поля у каждого объекта одинаковы?
Anonymous
да
Nick
полей много?
Anonymous
десяток
Nick
точнее не так, вы знаете все поля или они могут то быть то не быть?
Nick
короч набор полей постоянен или нет
Anonymous
я знаю их все и отсутствующих полей или пустых полей там нет. набор постоянен
Nick
тогда проще будет тот же агрегатор и first https://docs.mongodb.com/manual/reference/operator/aggregation/first/
Nick
по аналогии для каждого поля перечислите field_name: { $first: "$field_name" }
Nick
хотя нет
Nick
похоже я кой че упустил)
Nick
сортировку надо ж по все полям
Anonymous
визуально работает... в чём подводный камень?
Nick
отработало?
Nick
чет подумал надо сортировку включить по всем полям которые нужны
Anonymous
отработало?
пытаюсь понять. сейчас оттсестирую
Anonymous
блин вроде фунцихлирует
Anonymous
нормально выдаёт и все указанные мной поля и группирует по id с максимальным таймстемпом
Anonymous
спасибо большущее :)
Anonymous
Привет, подскажите плиз, что хочет от меня база )) - ставлю базу на виртуальную машину - выскакивает ошибка 100, все пути прописаны верны, все создано, если вдруг что то на виртуалке стоит 32 разрядная видна 10, ставил на рабочий комп все норм, не было ошибки 100(
SvPupok
ну 32 разрядная винда не лучший выбор
Anonymous
ок, попробуем переустановить
Anonymous
если что на 64 разрядной без ошибки все идет
Konstantinx
Привет ребят. Подскажите, можно ли в монге атомарно обновить несколько документов в одной коллекции?
Pavel 🕷
Но один точно можно)
Maksim
С транзакциями у носкл большие проблемы)
В 4.0 же обещают ACID транзакции =)
Pavel 🕷
В 4.0 же обещают ACID транзакции =)
Тож в 4ре) и не понятно ещё как оно повлияет на работу бд, но да, было бы круто)
Konstantinx
С транзакциями у носкл большие проблемы)
уже вижу. Может подскажите как это можно обойти? А если хранить в одном документе всё, это нормальное решение? Модно ли 16 мб обойти?
Nick
если вам надо транзакции, то выбора не много - имитируете двухфазный коммит на доках - ждете 4 версию - перестраиваете логику приложения, чтобы вам не нужны били транзакции (идемпотентность там и все дела) - берете нормальную транзакционную бд
Nick
а какие причины побудили уйти с постгры?
Konstantinx
заказчику кластеризация не нравится в постргес, а она нужна и беспокоится за скорость