yopp
_id gt MinKey limit 1
Bogdan
И выбрать к ней ближайший oid
Как рендомно попасть в реально существующий объект и не промахнуться, если oid - смесь нескольких значений?
yopp
Выбирать ближайший
Bogdan
Разве что ближайший
yopp
_id $gt Oid со случайной датой и не установленными младшими битами
yopp
Дёшево и сердито
yopp
Чуть дороже чем $eq, максимум по глубине дерева придётся по индексу проехаться
yopp
Это на порядки дешевле чем skip
Bogdan
Интересно посмотреть на реализацию
Dezmunt
Получается если свежий oid всегда больше по величине? Блин, ну с этим можно жить
yopp
Первые четыре байта OID это «текущее время»
yopp
Это может быть время на марсе
yopp
Но если вы ничего специально с _id не делаете, а ещё лучше ваш odm/драйвер и вовсе не генерирует их на клиенте, то ваш oid будет содержать серверное время
yopp
Но для задачи выбрать случайный элемент oid подойдёт.
Dezmunt
Это может быть время на марсе
Да не, метка создания oid
yopp
Не самое случайное распределение, но для базовых задач хватит
Dezmunt
Мне главное чтоб быстро, но концепцию я понял, спасибо
Oleg
у меня проблемы с установкой монго. установил вроде нормально, но при запуске я что-то не так делаю? как это гуглить?
Oleg
$ mongod --version db version v3.4.24 хм, может монго старая. попробую удалить и переустановить текущую.
Hulko
Ребят, привет. Есть такое задание, может кто то подскажет как я могу в монге такое задать? For the username we should allocate 150 bytes
Nick
а вот в монгусе каконибудь или другой орм по идее должны быть встроенные механизмы валидации и вот их наверное вам и надо использовать
Hulko
То есть нужно это просто в коде реализовать, так?
Nick
да
Hulko
Ааа, ну или mongoose
Hulko
Хорошо, спасибо
Nick
причем колво byte не равно колчество символов
Hulko
Зависит от кодировки или от чего?
Daniil
Зависит от кодировки или от чего?
бывают двухбайтовые символы
Nick
а еще если уж упарываться то еще и наличия сжатия
Nick
но эт прям загон))
Hulko
понял, спасибо большое)
Ilya
всем привет { ..., answers: [ { userId: ..., comments: [ questionId: ..., comment: ... ] } ] } у меня есть следующая структура, мне нужно сделать выборку комментариев (comment) по определенному questionId
Ilya
как это лучше сделать?
Ilya
const response = await AdminQuestionary.aggregate([ { $match: { _id: mongoose.Types.ObjectId(questionaryId), } }, { $group: { _id: "$answers.comments", } }, { $unwind: "$_id", }, { $unwind: "$_id", },
Ilya
я сделал следующим образом
Ilya
[ { _id: { _id: 5ee729acb5889f2068503c77, questionId: 5ee7298cb5889f2068503c6d, comment: '124124' } }, ] получил вот такой ответ как можно избавится от лишней вложенности? и как отфильтровать вопросы только с нужным questionId?
yopp
вместо $unwind используйте $filter
Ilya
вместо первого или второго?
yopp
вместо всех
yopp
вам надо будет сделать $addFields и там поле answers: { $filter: { … $filter :{ ваш фильтр } }
Ilya
@dd_bb а match и group оставить?
yopp
у вас останется в итоге документ в котором будет поле answers: [ … { … comments: […] } ]
Ilya
@dd_bb $addFields: { answers: { $filter: { $filter: { } } } }
Ilya
вот так?
yopp
скиньте пример документа
yopp
можете свой запрос на https://play.db-ai.co скинуть
yopp
я форкну
Ilya
https://play.db-ai.co/m/XuyW437kZQABtDXd
Zaff
можете свой запрос на https://play.db-ai.co скинуть
прикольно, а там еще нельзя версии монги менять? и планируется ли вообще ввести эту фичу
yopp
нельзя, планируется, но времени нет :)
Ilya
@dd_bb скинул в личку чтобы в чат не сорить:)
Munishkin
Всем привет, Хотела задать вопрос, но прежде чем его задавать хочу объяснить контекст. У меня есть следующая структура данных в модели (это кусочек кода с придуманными полями): { Location: { Address1: 'xxxx', Address2: 'yyyy' } } Моя цель при запросе location.address1 выдавать address2 если он существует. Можно ли это реализовать? Если да, то как? Я пыталась через геттеры это сделать но когда я делаю update документа то поле address1 перетирается значением address2. Пример геттера который я пыталась использовать: function getLocation(location) { if (location.address2) { return { …location, addresss1: location.address2}; } return location; } Заранее спасибо)! PS: mongoose version 4.6.8
yopp
я всё никак не соберусь и не допилю нормально поддержку нескольких коллекций и индексов
kk
коллекции разные же)
kk
self.db.users, db.user
Roman
как удалить _id записе? пишет что нельзя поменять или удалить так как оно само при создании документа генерируется. Так как удалить айдишник или перезаписать его?
yopp
это как primary key, обязательное неизменяемое поле
Roman
никак
а какие то ухищрения нельзя сделать например coздать пустой обьект потом обжект есайн потом delete и findAndUpdate?
yopp
нет, _id можно только скрыть с помощью проекций
yopp
без него документ не может существовать
yopp
как его скрыть ?
https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/
Roman
без него документ не может существовать
а если _id будет равно null то это не прокатит?
yopp
только один такой документ может сущесвовать
yopp
чем вам мешает _id?
Roman
чем вам мешает _id?
делаю деперсонализацию пользователя (не удаляю его а сбрасываю поля в нал)
Roman
и _id не хочет в нал сбрасывать
yopp
это невозможно
Roman
это невозможно
хорошо спасибо
yopp
если в документе уже существует _id, то вы ничего не сможете с ним сделать
yopp
только удалить
Roman
только удалить
вы имеете введу удалить поле _id ?
yopp
нет, только удалить весь документ
Roman
так без него не будет существовать документ вы ж выше писали