
Анатолий
24.04.2018
08:53:03
а есть команда на обрубание старых сессий коннектов - чтобы завершили запросы и открылись заново?

yopp
24.04.2018
08:53:14
Нет, опять-же это не ваша забота.
Это просто архитектура хранилища

Анатолий
24.04.2018
08:54:28
ага. только в доках об этом нюансе ни слова =((

Google

yopp
24.04.2018
08:54:33
Ваша проблема либо в каком-то специфичном баге в монге (маловероятно, но вы можете это проверить обновившись 3.6) либо в запросах/кешировании.

Анатолий
24.04.2018
08:54:52
вот про кэш ещё верится ))

yopp
24.04.2018
08:55:19
Не в монге, а в вашем приложении.
Монга не даёт вам никаких низкоуровневых ручек. Они вам не нужны.
Монга гарантирует вам целостность представления только в рамках одного документа.
Монга гарантирует что в случае с распределённым хранением, состояние всех нод рано или поздно будет синхронизировано.

Анатолий
24.04.2018
08:57:51
если я удаляю документ - remove, я не ожидаю увидеть его потом снова в результатах find

yopp
24.04.2018
08:58:17
И это не нормальное поведение.
Вы используете устаревшую версию монги
Обновитесь до 3.6 и проверьте что эта ошибка осталась. Если осталась, мы можем продолжить искать.

Алексей
24.04.2018
09:18:42
@dd_bb как там 4-ка ? ты не следишь ?

yopp
24.04.2018
09:18:58
Не-а. Смысла особо нет

Google

yopp
24.04.2018
09:19:08
Когда покатят публичные беты, тогда можно смотреть

Алексей
24.04.2018
09:19:41
ну ок. видимо к лету ближе ага ?

yopp
24.04.2018
09:19:44
Потом до 4.2 это всё полумеры, пока транзакции шардинг не начнут поддерживать.
Вообще хочу шарженные индексы. :(
Но без синхронизации internal id между нодами, это не совсем целесообразно.

Nick
24.04.2018
09:28:28
что ты подразумеваешь под "шарженными индексами"?

yopp
24.04.2018
09:31:10
Чтоб можно было отдельно шардить данные и отдельно шардить индексы
Одна из крутых особенностей hypertable заключается в том, что у каждой гипертаблицы свой собственный индекс.
Т.е. тебе не надо держать в памяти ненужные куски деревьев
Если добавить возможность разбивать индексы на чанки, по сути можно получить похожий механизм.
Но я сомневаюсь что до 5.0 какие-то существенные улучшения будут

vitalii
24.04.2018
09:39:08
парни , кто то шарит , как пройти все значения мыла ?
сделать forIn а в нем findOne ? но так же нужна же проверка если ниодного нет мыла 7 или есть проще чего то
User.findOne ({$or: [{email: profile.emails[0].value},{id_social_network: profile.id}]}, function (err, user) {}

Noname
24.04.2018
10:45:36
Ребят, прошу помощи, так как очень горит, а опыта с aggregate - мало.
Есть такая схема:
{
email: { type: String, unique: true },
referals: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
transactions: [{ type: mongoose.Schema.Types.ObjectId, ref: "Transaction" }]
}
надо вывести все транзакции всех рефералов, а у моих кривых ручек не получается применить $graphLookup к одному пользователю, никак не хочет работать после $match
буду безумно благодарен любой помощи!

yopp
24.04.2018
10:56:44
Покажите текущую агрегацию

Noname
24.04.2018
10:58:01
db.users.aggregate(
[
{
"$match" : {
"ref_id" : 10083298
}
},
{
"$graphLookup" : {
"from" : "users",
"startWith" : "referals",
"connectFromField" : "ref_id",
"connectToField" : "transactions",
"as" : "test"
}
}
],
{
"allowDiskUse" : false
}
);

yopp
24.04.2018
10:59:23
ref_id это аттрибут модели User?
и такой-же аттрибут есть в Transaction?

Noname
24.04.2018
11:01:06
ref_id -атрибут только модели User.
В модели Transaction отсутсвует
Но в транзакции есть ссылка по атрибуту owner

Google

yopp
24.04.2018
11:02:44
Вам в итоге надо получить транзакции или id транзакций?

Noname
24.04.2018
11:03:22
Сумму по атрибуту , во всех полученных транзакциях….

yopp
24.04.2018
11:05:02
"startWith" : "referals" имелось ввиду $referals наверное
Но вообще сначала разбейте эту операцию для себя по шагам
Скорее всего вам нужно сделать unwind по referals. Не уверен что $graphLookup корректно будет работать с массивами

Noname
24.04.2018
11:07:48
то есть получается
$graphLookup->дерево пользователей ->транзакции->$match->$project->$group

yopp
24.04.2018
11:08:35
а зачем ещё $match?
И будьте внимательны, allowDiskUse не влияет на graphLookup. Там сторого 100мб ограничение и его никак не обойти
Так что яб не выбирал транзакции через graphLookup. Для того чтоб выбрать из transaction только нужные, у вас уже есть owner. Так что я бы свёл бы к двум задачам: получить список индентификаторов рефереалов, а потом уже через $lookup вытащить нужные транзакции.
но вот был бы у вас materialized path, вы бы смогли в один запрос это сделать :)

Noname
24.04.2018
11:18:51
Спасибо!

Noname
24.04.2018
11:21:06
Огромное спасибо, еще раз)

XENONIUM
24.04.2018
12:37:20
Через компас никуда не подключается из-за ркн. Как быть?

Nick
24.04.2018
12:57:38
прокся, впн

Yurii
24.04.2018
16:12:58
Привет всем.
Есть интересный вопрос к тем, кто работает с mongoose.
Задача в post(‘save’ вызвать обновления всех записей по некоторому критерию. В this post(‘save’ мы можем получить текущую модель (последний сохраненный и верный документ) и его передать в .updateMany({
}, {
$set: updatedData
}).exec(next);
Но есть случай, когда некоторые поля были удалены, то есть надо делать $unset. Пересчитывать по модели сложно, может кто-то знает как можно достать с модели прошлый запрос или $unset?

Nick
24.04.2018
16:14:56
врядли монгус чтото примерное умеет

Yurii
24.04.2018
16:16:12
может можно через прототипы достучаться до этого метода?

yopp
24.04.2018
16:18:03
а в монгусе нет dirty tracking?

Google

Nick
24.04.2018
16:18:21
если открыть доки к монгусу, то там наверняка написано, что он использует предыдущий объект ну или хотя бы расписано как он это делает
по крайней мере в хибере вроде так

Yurii
24.04.2018
16:23:11

yopp
24.04.2018
16:25:22
Я правильно понимаю, что у вас есть какая-то модель и есть от неё зависимые. Когда вы обновляете родительский документ, вы за одно хотите сделать $set/$unset по какому-то условию?

8
24.04.2018
16:26:53
Здравствуйте, ребят .
Тут у меня просьба вам . Можете пожалуйста подсказать с какого сайта скачать mongodb на ubuntu 16.04.1

yopp
24.04.2018
16:28:40

Admin
ERROR: S client not available

8
24.04.2018
16:28:58
Просто , у меня раньше была в папке и можно было запустить сразу с терминала , а с нэта первый раз устанавливаю

Yurii
24.04.2018
16:29:29

8
24.04.2018
16:30:17

yopp
24.04.2018
16:30:49

Yurii
24.04.2018
16:32:23
и вопрос был как узнать какие поля были в $unset при сохранении текущего документа
UPD:
Нашли скрытую функцию $__delta() на модели, но она работает в pre(‘save’ (когда ещё есть изменения) и дает вторым элементом массива как раз запрос, что будет вызван в БД.
Итого переназначаем его в переменную this. и сможем получить в post(‘save’

yopp
24.04.2018
16:35:46
похоже на внутренности dirty tracking, да
насколько я понимаю в js удаляемые поля просто назначаются в undefined
и потом когда делается дельта состояний модели, скорее всего оно преобразуется в соотвествующий модификатор документа

Yurii
24.04.2018
16:37:19

Google

yopp
24.04.2018
16:39:36
Но вообще, это немного странно, что вы пытаетесь сделать
Это формально нарушает несколько основных принципов ООП. У вас где-то протёк интерфейс, куда не нужно

Yurii
24.04.2018
16:41:14
Спасибо. Надеюсь, кому-то будет полезно узнать о
$__delta()

yopp
24.04.2018
16:42:34
Попробуйте посмотреть откуда возникает проблема. Не знаю как монгусе, но в некоторых других ORM есть колбэки или возможность переопредлить getter/setter методы модели, чтоб сразу ловить изменине приводящее к деопределению полей
На мой взгляд ловить это уже перед сохранением, фактически разбирая запрос — очень ненадёжно

Yurii
24.04.2018
16:45:02

yopp
24.04.2018
17:14:58
тогда у вас проблема с single source of truth. самый правильный подход синхронизировать через субд, если вы данные в ней храните
иначе есть шанс получить неверное состояние модели

Viktor
25.04.2018
05:50:29
Доброго времени суток, а есть какие-то бест практисы по профилированию монги или тулы готовые?

Peter
25.04.2018
09:25:16
Привет, есть список документов в агрегатке, как каждому добавить свое уникальное число?
т.е.
первому документу добавить поле {myNewId: 1}
второму документу добавить поле {myNewId: 2}
n документу добавить поле {myNewId: n}

yopp
25.04.2018
09:56:45

Viktor
25.04.2018
10:01:21
Какая задача стоит?
У девелопера пару раз упала монга с OutOfMemory. Посмотрел логи, такое ощущение, что по одному документу тянется из курсора долгое время, а потом разваливается. Хочу погонять и поискать какой запрос или какой долгоживущий курсор роняет монгу. В логах монги перед крашем куча подобного:
COMMAND [conn2] command xxx.User command: getMore { getMore: 409911195575, collection: "User" } originatingCommand: { aggregate: "User", pipeline: [], cursor: {} } planSummary: COLLSCAN cursorid:409911195575

yopp
25.04.2018
10:01:47
плюс встроеный профайлер с большим порогом срабатывания

Viktor
25.04.2018
10:03:08
Понял, начну с этого, спасибо. А долгоживущие курсоры также можно потрекать в профайлере?

yopp
25.04.2018
10:04:08

Viktor
25.04.2018
10:27:18
как интересно
Ага, прод не упал, но звоночек некрасивый, поэтому и расследую