yopp
_id gt MinKey limit 1
yopp
Выбирать ближайший
Bogdan
Разве что ближайший
yopp
_id $gt Oid со случайной датой и не установленными младшими битами
yopp
Дёшево и сердито
yopp
Чуть дороже чем $eq, максимум по глубине дерева придётся по индексу проехаться
yopp
Это на порядки дешевле чем skip
Bogdan
Интересно посмотреть на реализацию
Dezmunt
Получается если свежий oid всегда больше по величине? Блин, ну с этим можно жить
yopp
yopp
Первые четыре байта OID это «текущее время»
yopp
Это может быть время на марсе
yopp
Но если вы ничего специально с _id не делаете, а ещё лучше ваш odm/драйвер и вовсе не генерирует их на клиенте, то ваш oid будет содержать серверное время
yopp
Но для задачи выбрать случайный элемент oid подойдёт.
Dezmunt
yopp
Не самое случайное распределение, но для базовых задач хватит
Dezmunt
Мне главное чтоб быстро, но концепцию я понял, спасибо
Oleg
у меня проблемы с установкой монго. установил вроде нормально, но при запуске
я что-то не так делаю? как это гуглить?
Oleg
$ mongod --version
db version v3.4.24
хм, может монго старая. попробую удалить и переустановить текущую.
Oleg
Hulko
Ребят, привет. Есть такое задание, может кто то подскажет как я могу в монге такое задать?
For the username we should allocate 150 bytes
Nick
Nick
а вот в монгусе каконибудь или другой орм по идее должны быть встроенные механизмы валидации и вот их наверное вам и надо использовать
Hulko
То есть нужно это просто в коде реализовать, так?
Nick
да
Hulko
Ааа, ну или mongoose
Hulko
Хорошо, спасибо
Nick
причем колво byte не равно колчество символов
Hulko
Зависит от кодировки или от чего?
Daniil
Nick
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
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
yopp
Roman
как удалить _id записе? пишет что нельзя поменять или удалить так как оно само при создании документа генерируется. Так как удалить айдишник или перезаписать его?
yopp
yopp
это как primary key, обязательное неизменяемое поле
Roman
никак
а какие то ухищрения нельзя сделать например coздать пустой обьект потом обжект есайн потом delete и findAndUpdate?
yopp
нет, _id можно только скрыть с помощью проекций
yopp
без него документ не может существовать
Roman
yopp
как его скрыть ?
https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/
yopp
только один такой документ может сущесвовать
yopp
чем вам мешает _id?
Roman
чем вам мешает _id?
делаю деперсонализацию пользователя (не удаляю его а сбрасываю поля в нал)
Roman
и _id не хочет в нал сбрасывать
yopp
это невозможно
yopp
если в документе уже существует _id, то вы ничего не сможете с ним сделать
yopp
только удалить
yopp
нет, только удалить весь документ
Roman
так без него не будет существовать документ вы ж выше писали