Alex
Никак
yopp
ребят подскажите как у монго с лефт джойнами?
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
yopp
> Performs a left outer join to an unsharded collection in the same database to filter in documents from the “joined” collection for processing.
Mike
вопрос смежный по ноде/монго - вот проблема такая - регистрация пользователя - валидация данных, проверка существующего пользователя по полю емайла - сохранение пользователя. Но блин на фронте если щелкают часто то успевают как то попасть в тот момент когда модель уже сохранилась, но ответ еще не отошел пользователю. И вот вопрос сколько по времени занимает проверка пользователя + сохранение ? Точнее сколько должно это примерно занимать - модель пользователя простая несколько строк всего. я сначала думал что это из за пинга - типа ответ идет долго от сервера, но там именно ошибка базы
Mike
сервер ec2 вторйо который там , монга последняя, поле емейл unique: true
Mike
Сделайте уникальный индекс по полю
email: { type : String, index: true, unique: true },
Mike
nfv ctqxfc nfr
Mike
там сейчас так
yopp
Проверьте что индекс в самой монге действительно есть и он уникальный
Mike
проблема возникает когда пытабются одни и те же данные пихаться в базу с интервалом 10 мс
Mike
Проверьте что индекс в самой монге действительно есть и он уникальный
а вообще сколько это по времени должно занимать ?
Mike
сохранение модели простой такой
yopp
С вероятностью 99.7% индекса в коллекции нет или он не уникальный. Посмотрите документацию к вашему драйверу/ODM как управлять индексами
yopp
Скорее всего кроме объявления его в модели требуются ещё действия
Mike
@dd_bb вот не сочтите за абьюз но монжо еще поговорить о субдокументах?
Mike
документации маловато
yopp
Можно
yopp
Почему нельзя то 🧐
Mike
ну мало ли
Mike
в обшем смотрите вы предложили вчера вариант [{_id:...,, val:...}...]
Mike
т.е. я создаю коллекцию для атрибутов? и эти айди уже являются ссылкаим из товара на аттрибуты?
Mike
просто в документации написано что драйвер сам конвертирует массив в схему https://mongoosejs.com/docs/subdocs.html
Mike
и совершеено неясно как поступать если есть например аттрибут "цвет" ;" красный, зеленый, синий" - это получается надо на три объекта дробить?
yopp
Вы создаёте в товаре массив документов описывающих атрибут: [{id, value}], где id это идентификатор атрибута. Сами описания атрибутов сложить в отдельную коллекцию. Про цвет можно и три добавить. А можно и в value положить массив
Mike
Вы создаёте в товаре массив документов описывающих атрибут: [{id, value}], где id это идентификатор атрибута. Сами описания атрибутов сложить в отдельную коллекцию. Про цвет можно и три добавить. А можно и в value положить массив
т.е. я сначала создаю коллекцию аттрибутов, забиваю её даннными, затем уже при составлении товара я дергаю из этой коллекции ? у меня описания аттрибута как такогого то не - просто "цвет", "габариты", "производитель" - т.е. относительно простые, не требующии дополнительй расшифровки
CybernatiC
Ребят привет! Делаю чатик, хочу получить сообщения с истории как получить последние сообщения и отсортировать их от новых к старым?
CybernatiC
let data = await Message.find({ $or : [ {username: socket.username, send_to: send_to}, {username: send_to, send_to: socket.username} ]} ).sort({create_at: -1, create_at: -1}).limit(5).exec();
CybernatiC
create_at:-1 зачем два раза?
Как правильно отсортировать последние созданные сообщения по новизне?
Aleksandr
Ну так и сортировать полеСДатой:-1
CybernatiC
я так получаю последние сообщения теперь надо обратным порядком вывести)
Aleksandr
Массив data содержит нужные записи?
CybernatiC
Массив data содержит нужные записи?
да теперь хотелось бы чтобы внутри data порядок был обратным
CybernatiC
пытаюсь вывести историю чатика как тут в телеграме, то есть новое сообщение внизу контента
Aleksandr
import orderBy from 'lodash/orderBy';
Aleksandr
const sorted = orderBy(data, 'create_at');
CybernatiC
а mongodb не умеет? )
Aleksandr
aggregate умеет
Aleksandr
Message.aggregate([ {$match: { $or : [ ... ]}}, {$sort: {create_at: -1 }}, {$limit: 5}, {$sort: {create_at: 1}}, ])
CybernatiC
Спасибо!
CybernatiC
isFulfilled: false isRejected: false
Aleksandr
await надо конечно же
CybernatiC
Да сорри)
CybernatiC
спасибо большое
Serg
всем привет. подскажите. Делаю aggregate, который выдает один документ, результат записываю в новую коллекцию через $merge. Если сделать несколько агрегаций подряд, то в коллекции с результатами документы имеют разные значения. По идее они должны быть одинаковыми.
Serg
[{$group: { _id: '$game_id', total: { $sum: '$viewer_count' } }}, {$addFields: { g: 1 }}, {$lookup: { from: 'games', localField: '_id', foreignField: 'id', as: 'Game' }}, {$replaceRoot: { newRoot: { $mergeObjects: [ { $arrayElemAt: [ '$Game', 0 ] }, '$$ROOT' ] } }}, {$project: { Game: 0, box_art_url: 0, _id: 0, id: 0 }}, {$group: { _id: '$g', items: { $addToSet: { name: '$name', total: '$total', g: "$g" } } }}, {$unwind: { path: "$items" }}, {$sort: { "items.total": -1 }}, {$group: { _id: null, items: { "$push": "$items" } }}, {$project: { tmp: { $arrayToObject: { $zip: { inputs: [ '$items.name', '$items.total' ] } } } }}, {$replaceRoot: { newRoot: '$tmp' }}, {$addFields: { time: '$$NOW' }}, {$merge: { into: 'final', on: '_id', whenMatched: 'replace', whenNotMatched: 'insert' }}]
Aleksandr
у вас же нет _id после группировки
Serg
Serg
все группировки технические, кроме первой
Serg
кусок с addField я убрал, он не нужен, просто по Null группировку сделал
Serg
данные отличаются на единицу, очень странно поведение
Aleksandr
данные не меняются?
Serg
нет
Nick
нет
можете добавить тестовых данных и запрос сюда https://play.db-ai.co/ и дальше уже глянем что не так
Nick
ссылочку сюда потом скиньте
Vova
@dd_bb планируется поддержка нескольких коллекций на play.db-ai.co?
yopp
она там есть, но для неё нет интерфейса
yopp
надо табы доделать, но руки не доходят
Vova
Ожидаемая фича)
Vova
лукапы тестировать
yopp
да
yopp
но вот надо этот нижний редактор засунуть в табы и сделать две кнопки добавления индекса и коллекции
yopp
на M0 не раскатили 4.2
Nick
жаль
Serg
могу выгрузить в Json
Nick
могу выгрузить в Json
а данные точно не меняются?
Serg
Serg
100%
Serg
через компасс можно быстро воспроизвести, проверил. только таймауты нужно увеличить
Nick
оп
Nick
а если в монгошеле?
Nick
действительно разные запуски дают разные результаты
Serg
монгошел тож самое
Nick
тоже проверил