Joseph
Действительно этот момент я проглядел
Joseph
печально , тогда придется вызывать хранимку похоже , это уже куда хуже
Aleksandr
у них это на ChangeStreams
Aleksandr
я тоже так делаю
Aleksandr
слушаешь изменения и делаешь что нужно как пришло чот
Alex
{ $addFields: { slaMinDate: {$min: '$slasMin.date'} } }, Как вернуть в итоге не значение $slasMin.date, а объект $slasMin?
Alex
slasMin - массив?
Да, мне нужно из этого массива вытащить объект с минимальной датой
Vova
min возвращает именно то что ты сравниваешь
Alex
min возвращает именно то что ты сравниваешь
Ну да, в этом и проблема, странно просто, что получить объект просто так не получается из этой операции
Nick
{ $addFields: { slaMinDate: {$min: '$slasMin.date'} } }, Как вернуть в итоге не значение $slasMin.date, а объект $slasMin?
Дальше с этой минимальной датой чтото делается в пайплайне или просто возвращается?
Alex
Дальше с этой минимальной датой чтото делается в пайплайне или просто возвращается?
Мне нужно получить объект из массива с минимальной датой, а потом уже с ним, с объектом. проводить операции
Dmitry
Друзья подскажите а если говорить о том сколько всего «весит» БД то нужно складывать эти два значения (Databsase SIZE и Index SIZE) ? Или индекс-сайз уже включены в Database SIZE ?
Dmitry
Это MongoDB Atlas
Vova
В базе
$filter + $unwind думаю так
Alex
$filter + $unwind думаю так
Сейчас попробую, отпишусь тут
Vova
Alex
Типо найти сначала мин дату, потом отфильтровать по условиям, а затем уже что-то сортировать? Должно помочь, я думаю...
Alex
Короче на reduce не хватило ума, сделал через фильтр
Joseph
Какая задача?
У меня есть список меток 0001, 0002, 0003, нужно сгенирировать новое название метки и если присутствуют дырки в списки то закрыть их, т.е. если список 0001 и 0003 , то сл. метка будет 0002 и 0004
Joseph
простым сопосбом не сделаете, оставьте эту идею
Сейчас просто напросто мне приходится даставать название всех меток и идти до дырки прямым перебором , в целом наверное это можно сделать внутри базы а наверх выкинуть только название новой метки
Nick
^. Неужели нет никакого способа? Или никто не сталкивался?
просто интересно а почему такая структура? почему не каждая пара как отедльный документ?
Vladislav
просто интересно а почему такая структура? почему не каждая пара как отедльный документ?
Ну в системе должно быть много словарей. И у каждого словаря был свой набор переводов. Я тоже подумал в отдельной коллекции хранить, но такая структура уже будет похожа на реляцонную модель.
Nick
Сейчас просто напросто мне приходится даставать название всех меток и идти до дырки прямым перебором , в целом наверное это можно сделать внутри базы а наверх выкинуть только название новой метки
вот так это и будет, что внутри базы что снаружи. Можете попробовать слушать на ченж стриме событие об удалении и гдето вести список свободных ид-шников. Но почемуто мне сразу тут видится необходимость в транзакциях или игрища с фалагами при попытках анчать использовать эти идшники
Vladislav
а что мешает добавить поле dictionaryId ?
да ничего не мешает. Думал, что обойдусь без этих "реляционных" штучек)))
Nick
и получить нормальную простую плоскую структуру
Nick
да ничего не мешает. Думал, что обойдусь без этих "реляционных" штучек)))
а что не так в релицонной модели? ваш случай с мета инфомрацией о словаре хранить отдельно от его содержимого - вполне здравая идея носкл
Nick
можно конечно , но это досточно больние присидания получаться
ок, вы же уже продумывали решение своей проблемы? как вы планировали использовать триггеры для этого?
Joseph
ок, вы же уже продумывали решение своей проблемы? как вы планировали использовать триггеры для этого?
Да , просто напросто на каждый insert в базу вызывать хранимую процедуру, которая будут к докуметну подкливать title
Nick
Да , просто напросто на каждый insert в базу вызывать хранимую процедуру, которая будут к докуметну подкливать title
каким образом? вы же уже продумывали как хранить список чтобы не пересаклись занчения, как потом делать по нему исключающую выборку и искат ьпервое свободное?
Joseph
хотел этот функционал засунуть в базу что бы по быстрее работало , что бы данные лишние не тегать на бек
Nick
я раньше это делал обычным перебором
т.е. и при использовании триггера также было бы?
Nick
это неправильный подход. а вообще зачем вам выбирать этот номер именно из этого множества? чем не подходят вообще любое чило? или даже просто ОджектИд монговский?
Nick
угу
решение ваше проблемы есть, если уж сильно упарываться, но ответьте на вопросы выше
Nick
а то что они пересекаются не мешает?
Nick
Дальше есть механизм который печатает специальные бар коды по ним
в общем случае вам надо следующее: 1. создать список с вашими идшниками, коллекцию например где каждый док это ваш ид. у каждого проставить флаг используемости 2. с использованием updateAndFind испкать первый у котого не используется флаг и проставлять его. а вернувшийся ид использовать 3. слушать ченж стрим по событиям удаления дока, либо это делат ьв коде - при удаленнии вашей сущности сбрасывать флаг в той коллекции, но обьязательно после подтверждения удаления самого дока 4. создать таску на ежедневную сверку идшников, т.к. схема выше не защитит в случае если по какойто причине не дошли до шага сброса флага и может оказаться что уже все ид заняты, хотя связанные доки уже не существуют
Joseph
а то что они пересекаются не мешает?
Почему они будут пересекаться
Nick
Почему они будут пересекаться
стоп, вы привели пример из 4 цифр, значит они когдато закончатся и будут переиспользованы при удалении связанного дока
Nick
Да при удаление он будет создан повторно , но это нам как бы ни как не мешает
про это и был вопрос. тогда подход выше будет вполне работоспособен
Joseph
про это и был вопрос. тогда подход выше будет вполне работоспособен
Да идея действительно не плоха , не сразу понял но она не плоха
Joseph
Спасибо большое
A
Здравствуйте, гуглил, но как-то не смог найти Грубо говоря есть коллекция записей в которой есть поля a,b Если a,b - это числа( 1, -10, 103.123), то всё ок Но вот если это string, то надо удалить эти записи(грубо говоря почистить базу от говна) Как я понимаю можно использовать для этого db.collection.remove и флаг collation в котором мы определяем верные типы полей(и если я правильно понимаю и поле будет допустим не намбер, то он его выпилит)
Anonymous
Доброго времени, что значит кластер?
Anonymous
Почему так много вложенности? Project->Cluster->Database->Collection->Documents?
Гена
Коллеги добрый вечер Столкулся с такой вот ошибкой на Secondary Шарда I REPL [replication-531] Choosing new sync source because the most recent OpTime of our sync source, xxxxxx:11113, is { ts: Timestamp(1571920044, 172), t: 1 } which is more than 30s behind member wwwwwww:11105 whose most recent OpTime is { ts: Timestamp(1571920991, 79), t: 1 } Никто с подобным не сталкивался?
Daniil
Почему так много вложенности? Project->Cluster->Database->Collection->Documents?
Потому что так организованы сущности. Кла́стер (англ. cluster — скопление, кисть, рой) — объединение нескольких однородных элементов. Видимо в вашем случае речь идет о нодах. Баз данных в рамках кластера может быть несколько. Про коллекции и документы думаю понятно.
A
https://docs.mongodb.com/manual/reference/operator/query/type/
Всё таки в базе числа валидные записи a и b - это тоже стринги, поэтому через тайп не пройдёт Я удалил с помощью регакса, мол есть буквы в поле, то удали Сейчас вопрос остался с еще один полем timestamp состоящий из "F�%@\u001e`�݇+�F@�9��\taR�Ɍ/̡�\u000b\f\u001e�;[*\u0006}\u0000#�U��Z�K» ПО сути с помощью типа надо написать вот так db.col.remove({timestamp: {$type: !«timestamp» } }) Правда я сомневаюсь, что можно вот так писать отрицание Ну или попробовать писать {$type: «string» } Ибо по суи такой вид - это стринг
A
или всё таки вот так db.col.remove({«timestamp»: {$not: {$type: «timestamp» } }})
Nick
или всё таки вот так db.col.remove({«timestamp»: {$not: {$type: «timestamp» } }})
проверьте тип у нормальных полей, но думаю все также через регекспы придется
Semeon
Привет, чат! Когда я использую $min или $max, могу ли я как-то обратиться к соседним полям объекта? Например, «Монга» нашла минимальное значение и можно ли как-то получить timestamp (он есть в объекте), чтобы знать, когда именно было это минимальное значение?
Vova
Можно отфильтровать в новое поле, как я скинул ранее. Кажется, это подойдёт
Vova
Оно выкинет все условия которые не подошли и то что осталось можно дальше обработать и прочитать timestamp
Semeon
Ну, почему бы и нет
Semeon
Привет, чат! Когда я использую $min или $max, могу ли я как-то обратиться к соседним полям объекта? Например, «Монга» нашла минимальное значение и можно ли как-то получить timestamp (он есть в объекте), чтобы знать, когда именно было это минимальное значение?
Дополню свой пример наглядно: { "LastUpdate": 1571438855, "Temperature": { "Minimum": 25.4, "Maximum": 30.1, "Average": 27.3 }, "Pressure": { "Minimum": 748.6, "Maximum": 749.4, "Average": 749 } } Хочется по значениям Minimum и Maximum полчить получить timestamp из того же объекта. Это возможно?
Anonymous
а как использовать популейт с findOne? что-то синтакст вообще какой-то braindead
Anonymous
aggregate не работает с findOne
Anonymous
как заполнить поля по id?
Anonymous
шизоиды какие-то синтакст делали