Kvhqm
Andrey
Kvhqm
Kvhqm
Я имел ввиду, когда ты делаешь запрос в бд для получения данных, ты ведь все равно делаешь запрос
Kvhqm
Т.е. что ты этим хочешь оптимизировать?
Andrey
Фраза - делаешь запрос на получения документа - может смущать.
Kvhqm
Kvhqm
А если док есть, ты делаешь 2 запроса...
Kirilll
Andrey
Если мы делаем findOne, то если есть какой-то результат, то коллекция не пуста. Одну строку получили и успокоились.
В случае с count, движок будет проходиться и считать количество, что, наверное, более ресурсозатратно.
Вот что я имел ввиду.
Я про другое, что за дизайн и концепт в вашем сервисе, что вам надо знать, пустая коллекция или нет, при том, что еще стоит задумываться о производительность, у вас предполагается +100500 rps на коллекцию без документов, или +-100500 коллекций. Вот это странно.
Experimentalist
Nick
Просто вопрос из интереса.
если просто из интереса, то можно положить документ при создании базы один раз и всегда знать точно что она не пуста
Alex
Друзья, поделитесь книгой "Mastering MongoDB 6.x" если есть у кого-то
madspectator
Experimentalist
Nick
Experimentalist
в части записи как и любые индексыв
В mongodb, если поле уникально, то нельзя сделать, чтобы было много строчек со значением этого поля null как в MySQL.
Может быть только одна строчка с null для unique поля.
Верно?
Nick
Experimentalist
Experimentalist
Допустим, поле было null, а стало не null. Это разумно после изменения на не null обновить индексы?
Experimentalist
Nick
Данила
Всем добрый день. Работаю с mongoDb и nest js. Есть условные таблицы users и posts. При написании кода создания поста мы используем модель поста и создаем новую сущность. Для удобства (в специфичных кейсах) мы хотим добавить после создания поста к юзеру из таблицы users в поле posts ObjectId на новый пост. Есть ли более удобное для этого решение, кроме как использовать модель юзера и обновлять вручную ему его поле через findByIdAndUpdate? Возможно какая-то привязка, чтобы это выполнялось автоматически при создании и удалении сущности (поста в нашем случае)
IDONTSUDO
IDONTSUDO
https://github.com/mongodb-js/mongoose-autopopulate
Данила
https://github.com/mongodb-js/mongoose-autopopulate
Насколько я понял, этот плагин нужен для автоматического populate всех ObjectId полей сущности. Мне же нужно при создании сущности с подвязкой на ObjectId конкретного юзера вставить ObjectId созданной сущности в определенное поле в записи этого юзера
Experimentalist
Что я не так сделал?
Experimentalist
Я кажется понял, я пытался явно полю задать null.
Experimentalist
А должно быть undefined.
Experimentalist
https://stackoverflow.com/questions/24488143/mongodb-set-id-as-decreasing-index
Experimentalist
Experimentalist
const latestRecord = await collection.find().sort({ timestamp: -1 }).limit(1).toArray();
Experimentalist
Experimentalist
Т.е. нам предлагают сначала все записи выбрать, затем их отсортировать в обратном порядке и только потом делать limit-skip.
Experimentalist
Оказывается в findOptions метода find был sort.
Experimentalist
Доброе утро, друзья. Как посчитать количество записей, которые идут до _id N. Грубо говоря, посчитать количество записей созданных до записи с _id N.
Амир
Experimentalist
const count = await collection.countDocuments({
_id: { $lt: new ObjectId(myId) },
action_type: 1
});
Вот такой запрос посчитает записи у которых экшн тайп = 1 и _id меньше, т.е. записи были созданы раньше, так?
Anton K.
Experimentalist
Experimentalist
Или неправильно делаю, что не храню?
Experimentalist
Зачем хранить дату отдельным полем, если она хранится в id, и зачем она хранится в id, если ею не пользуются?
Experimentalist
Experimentalist
Nikita
Кто нибудь играл в vectorSearch?
Это правда что в монге это работает исключительно по всей коллекции и нет варианта предварительно отфильтровать?
Nikita
Амир
Experimentalist
Всё попробовал, не работает.
Амир
Почему?
Амир
Artem
Ребята, всем привет!
Есть вопрос по планированию запроса и validate коллекции.
Есть запрос:
{"q":{"cn":"country_name","c_at":{"$lt":{"$date":"2024-11-18T10:21:50.001Z"}}},"limit":0}
Есть используемый индекс:
IXSCAN { cn: 1, uid: 1 }
Кол-во документов, которые он просканил, много:
"keysExamined": 145510823,
"docsExamined": 145510823
Кол-во фильтраций: "ndeleted": 9648
Из 145 миллионов просмотренных документов удалено только 9648. Это говорит о том, что фильтрация неэффективна.
Длительность запроса: "durationMillis": 353256
Окей, делаем новый индекс, более подходящий для нашего запроса:
{ key: { cn: 1, c_at: 1 }, name: 'cn_1_c_at_1' }
Выполняем запрос, получаем тоже самое...
"planSummary": "IXSCAN { cn: 1, uid: 1 }" используем не очень эффективный индекс..
Планировщик так решил:
"replanned": true,
"replanReason": "cached plan was less efficient than expected"
Вопрос: может ли помочь просто дроп "неправильного" индекса или потребуется полный validate коллекции?
Чтобы планировщик собрал полную и актуальную статистику по коллекции?
Nick
Ребята, всем привет!
Есть вопрос по планированию запроса и validate коллекции.
Есть запрос:
{"q":{"cn":"country_name","c_at":{"$lt":{"$date":"2024-11-18T10:21:50.001Z"}}},"limit":0}
Есть используемый индекс:
IXSCAN { cn: 1, uid: 1 }
Кол-во документов, которые он просканил, много:
"keysExamined": 145510823,
"docsExamined": 145510823
Кол-во фильтраций: "ndeleted": 9648
Из 145 миллионов просмотренных документов удалено только 9648. Это говорит о том, что фильтрация неэффективна.
Длительность запроса: "durationMillis": 353256
Окей, делаем новый индекс, более подходящий для нашего запроса:
{ key: { cn: 1, c_at: 1 }, name: 'cn_1_c_at_1' }
Выполняем запрос, получаем тоже самое...
"planSummary": "IXSCAN { cn: 1, uid: 1 }" используем не очень эффективный индекс..
Планировщик так решил:
"replanned": true,
"replanReason": "cached plan was less efficient than expected"
Вопрос: может ли помочь просто дроп "неправильного" индекса или потребуется полный validate коллекции?
Чтобы планировщик собрал полную и актуальную статистику по коллекции?
а сколько доков то в итоге подпадает под выборку?
Artem
Vladimir
Здравствуйте.
Хотел задать вопрос по поводу параллелизации.
Есть удаленная коллекция базы mongodb.
Она пусть будет 100 гигов.
Вопрос в чем, хочется на pymongo сделать 5 потоков например, чтобы в каждом потоке скачивать данные параллельно. Посмотреть изменится ли скорость загрузки всей базы при этом.
Но возникает вопрос здесь, как бы коллекцию разделять по умолчанию на 5 частей, чтобы каждый поток скачивал только свою часть.
Так как хочется универсальное решение, то хотелось бы на основе генерируемого поля id.
Есть ли какие нибудь функции, фильтры, которые бы позволяли это делать ?
К примеру, как по функции mod(5) к числу bigint.
Но только применительно к mongodb.
Спасибо.
Nick
Здравствуйте.
Хотел задать вопрос по поводу параллелизации.
Есть удаленная коллекция базы mongodb.
Она пусть будет 100 гигов.
Вопрос в чем, хочется на pymongo сделать 5 потоков например, чтобы в каждом потоке скачивать данные параллельно. Посмотреть изменится ли скорость загрузки всей базы при этом.
Но возникает вопрос здесь, как бы коллекцию разделять по умолчанию на 5 частей, чтобы каждый поток скачивал только свою часть.
Так как хочется универсальное решение, то хотелось бы на основе генерируемого поля id.
Есть ли какие нибудь функции, фильтры, которые бы позволяли это делать ?
К примеру, как по функции mod(5) к числу bigint.
Но только применительно к mongodb.
Спасибо.
можно и mod использовать, формируйте выборки как пожелаете на уровне кода и дергайте базу.
только зачем такое поведение, дамп снимать или для чего?
Vladimir
Ну хотелось какое то универсальное средство для разовой перекачки и для инкрементной.
Просто если база например большая, то хочется максимально ускорить процесс переливки для случаев когда или сама база большая, или инкремент большой.
Просто есть задача переливок из mongo в реляционки, а там каждая секунда на счету , чтобы в общий etl все наставлять.
И именно на основе id, потому что оно всегда есть, а timestamp или какой другой идентификатор в каждой коллекции от случая к случаю
Амир