Nick
это врапер над агрегацией
critskiy
йап…
Georgii
Привет! Я ньюфаг, прошу помощи. у меня есть коллекция tours, один элемент выглядит примерно так: { id: ..., schedule: [{kind: 'GroupAction'}, {kind: 'GroupAction'}], ... } Их много. В каждом tour в schedule мне нужно переименовать поле kind в каждом элементе. Я пишу команду: db.getCollection('tours').update({'schedule.kind': 'GroupAction' }, { $set: { 'schedule.$.kind' : 'action' } }, { multi: true }); Он мне отвечает: WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 }) В итоге в каждом tour.schedule переименовал kind только в первом элементе. Приходится запускать команду несколько раз, чтобы все переименовал. Что я делаю не так?
Алишер Абдуллаев
ребята , можете подсказать пожалуйста , нужно по интервалу 30мин получить данные в период с началы дня до данного времени. Как сделать подскажиет пожалуйста ?
Алишер Абдуллаев
Спасибо за ответ. Например, есть данные звонка за день(исходящий, входящий и тд). Мне нужно посчитать за день по интервалу 30мин сколько количество входящих, исходящих и тд были
Алишер Абдуллаев
from 00:00am till now
Dmitriy
да, я понял о чем вы, я свое время такую задачу решал через aggregate вида: [ {$match: {}}, { $project: { "period_in_day": {$cond: [ { $and: [{$gte: ["$hour", 0]}, {$lte: ["$hour", 7]}] }, "00-07", {$cond: [{$and: [{$gte: ["$hour", 8]}, {$lte: ["$hour", 15]}]}, "08-15", "16-23"]} ]} } } ] соответственно в $match у вас идет ограничение по времени, а в "period_in_day" вам надо сделать cond-ы по всем временным интервалам, которые вам нужны, т.е. по минутам (секундам), начиная с 0 часов ну а дальше следующим стейджем вы можете группировку получить по периодам внутри временного отрезка мой код выше - это чисто пример как я делал, возможно есть варианты оптимальней, но я не нашел их в свое время
Алишер Абдуллаев
да об этом думал, но есть наверно , которые сталкнулись и более оптимальные варианты. Спасибо Дмитрий!
Dmitriy
да об этом думал, но есть наверно , которые сталкнулись и более оптимальные варианты. Спасибо Дмитрий!
может и есть, я свое время весь гугл обрыл на ресерче, оптимальнее не нашел, только если на клиент переносить логику группировки)
madspectator
В агрегации разве нет функции типа strftime, чтобы просто использовать параметр "%H:%M" и затем группировать по этому результату?
Dmitriy
В агрегации разве нет функции типа strftime, чтобы просто использовать параметр "%H:%M" и затем группировать по этому результату?
как вы себе представляете?) у меня есть 3 записи: ххх | 20120-01-14T16:00:31 yyy | 20120-01-14T16:05:22 yyy | 20120-01-14T16:08:04 все эти записи должны попасть в один group c условным именем 16.00 как в вашем примере это будет работать? у вас сформируются 3 разные записи в group)
Dee
Всем привет! Подскажите по best practise Есть документ, например Account. Генерим UUID программно хотим сохранить его в наш документ. Этот UUID - идентификатор данного документа. Для этого: 1) Используем _id поле монги и сетим туда сгенерированный UUID 2) добавляем поле accountId и сетим туда сгенерированный UUID Как более правильно и почему?
yopp
чем oid не подходит?
Dee
а почему именно uuid?
Тут не важно, что именно. Это может быть и нумерация. Просто вопрос, куда правильнее сохранять. в отдельное поле или можно в _id
yopp
правильно или не правильно тут нет
Dee
Я понял вопрос.
Dee
UUID, потому что он будет использоваться ДО создания в базе.
yopp
objectid так-же можно генерировать на клиенте
yopp
более того, многие odm по-умолчанию и генерируют его на клиенте
Dmitriy
правильно или не правильно тут нет
А разве в поле _id даст сохранить не hex и не потеряется ли встроенный индекс при этом?
yopp
вводить отдельное поле имеет ссмысл если документ имеет какой-то ещё идетификатор, специфический для внешней системы
yopp
в остальных случаях я не вижу смысла вообще трогать _id
yopp
не понял вопрос
yopp
в 99.7% ни в каких
yopp
оставить oid и всё
Dmitriy
Можно ли с клиента сохранить в поле _id не hex, а uuid?)
yopp
Можно ли с клиента сохранить в поле _id не hex, а uuid?)
в _id можно хранить всё, что не нарушет требования unique index
Dee
Я топил за то, чтобы этот идентификатор пихать в _id (как в SQL например), но коллеги считают, что надо дополнительное поле.
yopp
т.е. в чём проблема с oid?
yopp
Его можно трогать, когда этому есть рациональное объяснение
yopp
это 0.3% случаев, когда есть конкретная проблема, которая не решается использованием oid
yopp
и из этих 0.3% больше половины будут оптимизации
Dee
это 0.3% случаев, когда есть конкретная проблема, которая не решается использованием oid
Так проблема в другом, oid не используется вообще. Это просто лишнее поле будет.
yopp
т.е. когда мы можем вместо псевдослучайного значения положить в индекс что-то immutable и что даст какие-то очевидные приемущества
yopp
почему он не используется-то? :)
Dee
Я и пытаюсь этьо объяснить.
yopp
проблема что у вас идентификатор генерируется на клиенте не является проблемой, так как ObjectId тоже так умеет
Dee
Да, когда я это прочитал, подумал, что может быть решением.
yopp
разница между uuid/v4 и objectid только в структуре
Dee
Но коллегам не нравится, что мы используем для внешних систем _id который завязан на базе данных, а не какое-то кастомное поле, которое создали мы.
yopp
а смысл у них примерно одинаковый, это два псевдослучайных идентификатора
yopp
«не нравится» неэффективно
yopp
если «не нравится» нет рационального, аргументированного объяснения, то самая эффективная стратегия игнорировать тех кому не нравится и оставить по-умолчанию
yopp
говоря проще «не нравится» не решает конкретной проблем. а раз проблемы нет, значит и делать ничего не надо
yopp
а даже если в эти аргументы ввязываться, то uuid и oid одинаково плохой выбор :)
yopp
это всё про «красивые идентификаторы», которые не нужны
yopp
вообще никому
Dee
=)
madspectator
Я тоже эмпирическим путём пришёл к тому, что _id лучше не трогать.
Dee
Я тоже эмпирическим путём пришёл к тому, что _id лучше не трогать.
Но тогда вопрос, использовать ли поле _id как идентификатор сущности или для этих целей использовать свое кастомное значение с кастомным полем?
madspectator
Думаю, зависит от контекста.
Dee
Какие вообще кейсы у вас для применения _id. Как идентификатор документа или поле для хранения времени создания.
yopp
это единственный валидный кейс
Dee
И нет таких кейсов, что вам надо сделать уникальным документ, но ориентироваться на _id не хочется?
Nick
Нет, это не предполагается.
тогда причем причем здесь притензии к ид?
yopp
смысл _id что это контекстно-независимый immutable идетинификатор
Dee
для этого есть вторичные уникальные индексы
Вот мой вопрос напрямую об этом. Использовать ли для этого поле _id или вообще не работать с этим полем и создать кастомное, а _id существует как фантом.
madspectator
это единственный валидный кейс
Например, можно грохнуть записи старше какого-то периода времени, имея один лишь _id. Пример, скорее надуманный, но сработает в случае надобности.
yopp
если документы как-то привязаны к датам, то в них стоит добавить поля с нужными датами
yopp
oid не гарантирует вообще ничего
yopp
там вместо времени может быть абсолютно что угодно