yopp
Забейте. Сделайте индекс и по нему covered query
yopp
500 документов в день это меньше 200к в год
yopp
Забейте. Сделайте индекс и по нему covered query
Монга по-моему уже сама count с условием по индексу в covered query умеет превращать
yopp
Потом выборка по всей коллекции может обойтись и metadata collection size
yopp
Это очень дёшево, пусть и не идеально точно
yopp
Для пагинации — пофиг. Округлите до сотни и все
yopp
Covered query это когда запрос удовлетворяется чтением только индекса. В projection запроса должны быть включены только поля из индекса и выключён _id
Dmitry
сейчас я просто добавил второй запрос countDocuments({})
yopp
Но если у вас по всей коллекции выборка, то https://docs.mongodb.com/manual/reference/method/db.collection.estimatedDocumentCount/#db.collection.estimatedDocumentCount
yopp
Ясно, почитаю, всегда думал что _id тоже в индексе по умолчанию
Можно и по нему, тогда в projection только _id должен быть
yopp
Но без условия это смысла особо не имеет. Вообще при таком количестве документов не надо запариваться
yopp
Сделайте как делается быстрее, в добавьте алерт на запрос в мониторинг, когда он будет около 150мс документы считать и живите спокойно
Dmitry
Ну да, у меня просто запрос «все документы»
Dmitry
Ок, спасибо
Mazzara
всем привет, может кто знает как в pymongo перенести документ с одной коллекции в другую и плюс update его и $set пару новых ключей?
Mazzara
я понимаю что можно просто удалить из одной коллекции и добавить новый документ в другую коллекцию с такими же ключами и значениями но есть ли более изящный способ?
Nick
всем привет, может кто знает как в pymongo перенести документ с одной коллекции в другую и плюс update его и $set пару новых ключей?
Монга сама по себе не предоставляет такого интрумента. Можете пошерстить доку по драйверу но не факт что для него чтото будет. Такая операция требует наличия транзакции для обеспечения атомарности, а они появились только в 4 монге. Собственно вам нужно реслизовать это руками
Nick
Можно обойтись и без транзакции если допустимо иметь одинаковый док в обеих коллекциях и есть способы это зпдетектить и произвести повторное удаление
Nick
Оут не перемещает доки, а кладет результат в коллекцию
Николай
https://t.me/data_meetups_moscow/47
yopp
и плюс out целиком коллекцию заменяет (всё ещё): https://docs.mongodb.com/manual/reference/operator/aggregation/out/#replace-existing-collection
yopp
https://t.me/data_meetups_moscow/47
Да, это Scalability Camp митап в Москве, на котором 6 июня я буду делать доклад «От мегабайт до петабайт не расплескав смузи». Места начинают заканчиваться, регистрируйтесь если планируете туда пойти!
yopp
А мастер-класс «Практическая схемотехника» уже послезаватра. Приходите, я буду на примерах рассказывать о популярных паттернах проектирования документов, о том когда стоит и не стоит их применять и почему. Плюс появилась возможность оплатить билет наличными на месте (за одно и проверим новый налоговоый режим). Билет может оплатить и ваша компания, просто выберите оплату для юрлица — сформируйтеся счёт и все необходимые документы. Потеребите ваше руководство, это отличный способ за один день сильно прокачаться! Билеты тут: https://db-ai.timepad.ru/event/980574/
yopp
И монга разыгрывает уже 4 000$: https://mdbwchallengeweek4.splashthat.com
yopp
а записи не будет?
В этот раз нет. Не так-то просто найти тех, кто сделает нормальную запись и трансляцию :(
Daniil
Жаль (
yopp
можно рассчитывать, что в 20:00 все закончится? есть возможность приехать в мск на один день, но обратный поезд уже в 21:08
Очень стараюсь сделать так, чтоб закончилось :) В любом случае, я специально на конец оставил факультативную и не очень объёмную часть про миграции
yopp
Она как буффер, её под нож если что можно пустить. Там много не расскажешь :)
Ruslan
Всем привет! Может кто сталкивался с проблемой: http://prntscr.com/nsaw6i фильтр не хочет залазить внутрь объекта.
Константин
Добрый день. В базу не записывается кириллица, в чём дело? Справа то, что приходит на сервер.
yopp
Добрый день. В базу не записывается кириллица, в чём дело? Справа то, что приходит на сервер.
Вероятнее всего причина где-то в драйвере или ODM. Проверьте нет ли у вас валидации на поле fullname, так как монге в приципе фиолетово что вы запишете в строку, главное чтоб проходило валидацию как utf8 строка. В вашем случае нет ни ключа, ни значения. Вероятнее всего данные не попали в запрос в монгу
Ruslan
Привет. Кинь пример с документом где не срабатывает на play.db-ai.co
Накидал, тут всё работает https://play.db-ai.co/m/XOZ8AqBXLQABKmhg operation меняется на operation11. Буду у себя ошибку искать
Ruslan
👍проверьте что в req.body.so_id то что вам надо
Да там то что нужно, проверил. Ругается на схему http://prntscr.com/nsbhj9
yopp
Да там то что нужно, проверил. Ругается на схему http://prntscr.com/nsbhj9
Это к монгусу вопрос: https://github.com/Automattic/mongoose/blob/913ef814e89eef66d954caa67925d9fbc0c7a657/lib/helpers/update/castArrayFilters.js#L69
Yurii
Ребята, вопрос по mongoose есть такая схема data: { type: ObjectId, refPath: 'onTest' }, onTest: { type: String, enum: ['OneTest', 'SecondTest'] },Внимание вопрос, можно ли делать апдейт внутренних коллекций?
Yurii
что то вроде const test = TestModel.find() test.data.somefield = 'new' test.save()
Nick
что значит "внутренних коллекций"?
Yurii
связные коллекции
Yurii
@yatoba апдейт других коллекций которые есть в refPath
Nick
Не вкурсах, просто интересгая фраза была. Советую просто попробовать
Josh
"items" : [ { "itemName" : "🖋Scroll of Engraving", "qty" : "1" }, { "itemName" : "Metallic fiber", "qty" : "1" }, { "itemName" : "Azure murky potion", "qty" : "1" } ] ткните плз как строчкой вернуть: itemName: qty#...
yopp
но вообще лучше на клиенте это делать
Josh
это разово, просто для конвертации челику под его "формат", спасибо
Josh
https://docs.mongodb.com/manual/reference/operator/aggregation/concat/
итем и чисто я склею, но мне надо элементы массива все ещё
Josh
Josh
все в одну строчку: 🖋Scroll of Engraving 1#Metallic fiber 1#Azure murky potion 1
Josh
не бейте, такой формат, сам в шоке
yopp
не бейте, такой формат, сам в шоке
https://docs.mongodb.com/manual/reference/operator/aggregation/reduce/
yopp
можно прямо одним reduce и обойтись
Josh
ой точно, спасибо
yopp
да, внутри $concat
Josh
Т.к. значения массива объекты, то нужен еще вложенный конкат, че-т не выходит пока
Josh
Почти
Josh
Убрать бы # изначально
yopp
В конец поставь
Josh
В конец поставь
так в конце тогда будет 🌝
yopp
так в конце тогда будет 🌝
https://play.db-ai.co/m/XObd-AgjhgAB8jk3
yopp
или я что-то пропустил?
Igor
Коллеги, помогите пожалуйста, не получается задать ttl для документа, документ удаляется в течении минуты несмотря на то, какую бы я не поставил дату в expireAfterSeconds const mongoose = require('mongoose'); const Schema = mongoose.Schema; const EmailSchema = new Schema({ email: { type: String, required: true }, hash: { type: String, required: true }, createdAt: { type: Date } }); EmailSchema.index( { "createdAt": 1 }, { expireAfterSeconds: 120 } ); module.exports = mongoose.model('Email', EmailSchema); в принципе пробовал и разными путями, ничего не помогает разве что сработало для меня - плагин mongoose-ttl, но мне так же нужно удалять по условию, да и в принципе хочется разобраться почему не работает
Josh
или я что-то пропустил?
ага, надо чтобы только между ними была вставка, в принципе человека устроил результат уже, но задача до конца не решена
Nick
так же это может быть изза часовых поясов
Boris
Коллеги, добрый день. Подскажите плз, такая проблема: поднят реплика сет из трех монг, и был сделан бэкап с помощью mongodump - но без флага --oplog и без указания идентификатора сета, т.е. фактически дамп с одной ноды. Можно ли его каким-то образом через mongorestore восстановить? Сейчас все попытки заканчиваются тем, что кластер через какое-то время отторгает новые данные
Igor
угу спасибо, вечером попробую, отпишусь с фидбэком :)
yopp
Напомню что «Практическая схемотехника» уже завтра. Приходите и узнайте на практических примерах как проектировать документы: https://db-ai.timepad.ru/event/980574/ На Scalability Meetup #9, который пройдёт 6 июня, осталось всего 12 мест. Приходите послушать о том, какие инструменты для масштабирования есть в монге: https://www.meetup.com/Scalability-Camp/events/261525352/ Началась 4 неделя MongoDB Weekly Challange, главный приз на этой неделе $4,000: https://mdbwchallengeweek4.splashthat.com
Josh
я правда поискал в гугле и тут, простите заранее, но... как задать Boolean, чтобы по дефолту false писал? Ну или как по false искать документы?
Nick
я правда поискал в гугле и тут, простите заранее, но... как задать Boolean, чтобы по дефолту false писал? Ну или как по false искать документы?
В монге нет понятия дефолтного значения для поля, но оно есть у всяких орм где вы лписываете схему. Чтобы искать по фолс используйте обычный $eq. Для полей которых нет используйте $exists:false. Для поиска по любому условию комбинируйте то что выше с $or