yopp
$expr с $last или агрегация с $addFields первым шагом
Rostyslav Pidburachynskyi 🇺🇦🍉
Если коротко, то почти никак
Есть же способ, ранее работал с sql, там для этого отдельную таблицу нужно было заводить, и никаких проблем небыло, тут же то же можна так поступить, но думаю монго разрешает такое сделать.
yopp
вы можете добавить поле last_element и делать в него $set в момент когда делаете $push в массив
Rostyslav Pidburachynskyi 🇺🇦🍉
вы можете добавить поле last_element и делать в него $set в момент когда делаете $push в массив
Окей, хорошее решения, но неужели нельзя сделать средствами монго именно из массива?
yopp
aggregate([ { $addFields: { last_status: { $last: "$statuses" } } }, { $match: { "last_status.status": "foobar" } } ])
yopp
но это будет требовать перебора всех документов при запросе
yopp
самый простой вариант с предварительно установленным полем и индексом по нему
yopp
aggregate([ { $addFields: { last_status: { $last: "$statuses" } } }, { $match: { "last_status.status": "foobar" } } ])
тут можно добавить индекс по statuses.status, и сделать $match по statuses.states: foobar, тогда перебор будет только по тем документам, которые содержат хоть один элемента массива со status == foobar
yopp
это относительно дешево
yopp
(если таких документов не очень много)
Rostyslav Pidburachynskyi 🇺🇦🍉
aggregate([ { $addFields: { last_status: { $last: "$statuses" } } }, { $match: { "last_status.status": "foobar" } } ])
Спасибо, но думаю, для больших бд будет тоже проблематично, тогда лучше сделаю отдельное поле с последним статусом.
Vladyslav
Привет! Подскажите почему пожет возникать ошибка при создании дампа? Просмотр коллекций через GUI Studio 3T работает нормально, а при дампе ошибка: error doing TLS handshake with localhost:27017: EOF error connecting to db server: no reachable servers
Edgar
Привет, Подскажите пожалуста, как я могу организовать paging с хорошой прозводительностю для колькци около 10 млн записей? Я пишу на С#.
Захар
Как получить максимальную и минимальную даты из бд? Хранится в ISODate
Alexander
Как получить максимальную и минимальную даты из бд? Хранится в ISODate
Приблизительно так же, как получить последнюю запись в базе.
Alexander
Очевидно же.
Захар
Приблизительно так же, как получить последнюю запись в базе.
Я сейчас получаю последнюю запись, но вдруг есть уже готовый вариант
Alexander
Готовый вариант лишь в правильном указании сортировки.
Alexander
Это если без агрегаций.
BARSOOQUE
Лучше хранить лог сообщений полем в каждом чате, или создать отдельную коллекцию под все сообщения?
Vladimir
лучше в отдельной коллекции
Eugen
Всем привет, ребят, столкулся с проблемой с Mongodb ( Mongoose ) . Может кто знает, как вернуть все объекты которые не повторяются по email? distinct использую, но возвращает в виде array значения которые в базе повторились. А мне надо что бы вернул объекты без дупликации.
kk
?
Если будете фильтровать выдачу по индексам, то можно обойтись skip/limit, если надо ходить по всей коллекции, то я бы выдумывал дополнительные поля page с индексом page+<поле сортировки>
kk
может ещё что-то предложат
kk
+ непонятно что для вас значит "хорошая производительность"
Bogdan
Привет, Подскажите пожалуста, как я могу организовать paging с хорошой прозводительностю для колькци около 10 млн записей? Я пишу на С#.
Непонятно, если пагинация с выборкой, тогда возможно стоит использовать связку Mongo с другими базами. Если без выборки, тогда можно по кастомному id (auto increment), но вероятно это не подойдет под задау
Bogdan
?
+ какой размер базы и кол-во записей
Edgar
Если будете фильтровать выдачу по индексам, то можно обойтись skip/limit, если надо ходить по всей коллекции, то я бы выдумывал дополнительные поля page с индексом page+<поле сортировки>
дила мения "хорошая производительность" это когдат я буду выбирать 100 элементов с коллекци при это сортируя обратном по CreatedDate и это бы длился не более 2-3 секонд есле коллеккция имете 10млн элементов, но когда я принимаю Skip/limit это занимает не менеть 10 сек. Как я могу это исправить ?
Edgar
Непонятно, если пагинация с выборкой, тогда возможно стоит использовать связку Mongo с другими базами. Если без выборки, тогда можно по кастомному id (auto increment), но вероятно это не подойдет под задау
думаю да , я использовал SKIP/LIMIT со SORT но в это случае мой запрос длится не менее 10 сек , может есть другие методы для повшения приоизводимостьи ?
Anonymous
10 млн в среднем
Сколько весит эти 10 млн?
Bogdan
если сортировка по одному полю, попробуйте создать индекс сразу с полем по которому вы потом сортируете (+ DESC,ASC). при выборке с таким индексом в теории можно отказаться от метода .sort(). ПОсле этого можно начать изучать .explain() вашего запроса. Создавать query нужно так чтобы использовался ваш индекс, или форсить использование, если уместно. В теории это может увеличить производительность
Edgar
Сколько весит эти 10 млн?
Около 3,5 Гб в среднем весит.
Bogdan
теоре да но как я в практике другой разговор, у вас был такой практики ?
на практике работает, но для вашего случая, моя практика - это теория) поэтому и нужно пробовать
Daniil
Всем привет, ребят, столкулся с проблемой с Mongodb ( Mongoose ) . Может кто знает, как вернуть все объекты которые не повторяются по email? distinct использую, но возвращает в виде array значения которые в базе повторились. А мне надо что бы вернул объекты без дупликации.
Агрегацией думаю только. Приходит на ум идея сгруппировать по признаку уникальности, а потом отфильтровать только те записи, что после группировки остались в единственном числе
Nick
Около 3,5 Гб в среднем весит.
добавьте памяти и постройте индексы
Eugen
дайте больше инфы, пример данных и пример результата который нужен
В базе { "_id":"5ee3b375b77d4d7818a7dafe, "mobile":"123123123", "surname":"Saranca", "data_next_contact":"", "email":"test@gmail.com", "name":"Yevhen", }, { "_id":"5ee3b375b77d4d7818a7dafe, "mobile":"123123123", "surname":"Saranca", "data_next_contact":"", "email":"test@gmail.com", "name":"Yevhen", } Хочу получить получить не оба ( бо они дубликаты ) , а один . По email проверять дубликаты На выходе { "_id":"5ee3b375b77d4d7818a7dafe, "mobile":"123123123", "surname":"Saranca", "data_next_contact":"", "email":"test@gmail.com", "name":"Yevhen", }
Nick
ок, тогда вам нужно сделать группировку по емейлу и там использовать $first
Eugen
ок, тогда вам нужно сделать группировку по емейлу и там использовать $first
но в списке будет больше тысячи записей, где моэет 10% повторяться. И мне надо вывести все записи но без дубликатов
Nick
если данных не миллионы строк, то проблем не будет
Nick
если же вы можете както ограничить выборку, то станет только лучше
Nick
момент
Eugen
https://play.db-ai.co/m/XuTud4OtowAByqNV
ага, а как добавить это туда ? id_meetup: { $in: newArr } это у меня было в find().
Nick
добавил match stage
Eugen
добавил match stage
о, супер, огонь, спасибо большое за помощь )
BARSOOQUE
Как сделать запрос на записи в которых в указанном массиве содержится любой элемент из переданного массива?
Сергей
всем привет. я впервые сталкиваюсь с mongodb, задача перенести БД на другой сервер После переноса БД решил сравнить размер, и он отличается, это нормально или я сделал неполный dump? команды для создания dump и восстановления mongodump --db db_name --archive=./backups/db_name.gz --gzip mongorestore --gzip --archive=db_name.gz -d db_name
Sergey
ребята подскажите как переместить документ mongodb из одной коллекции в другую
S
есть вот такие документы, как мне к value прибавить 2 в каждом документе?
S
$inc
спасибо огромное
S
почему он у меня добавил и прибавил?
Edgar
Потаму что ты инкрементировал value а не Value
S
я даже и незаметил, спасибо огромное
evergood
День добрый, а кто-нибудь официальные курсы проходил, стоит их изучать?
Edgar
А они платные что ли?
Да, но думю в youtube тоже есть бесплатно
Denis
Привет, подскажите как запилить числовое поле user_id при добавлении нового пользователя? Как в MySQL первичный ключ. Нашел старое решение в оф.документации через cоздание отдельной коллекции сounters, в которой храним ID последнего юзера, при добавлении нового пользователя, инкрементим и обновляем (findOneAndUpdate) счетчик в коллекции counters и записываем новому юзеру в качестве ID. Так и осталось или есть лучшие способы?
👌
Добрый вечер! Помогите пожалуйста я новичок в mongodb, express.
👌
Добрый вечер! Помогите пожалуйста я новичок в mongodb, express.
CastError: Cast to ObjectId failed for value "xcv" выводить такую ошибку в инете не нашёл ответа