@MongoDBRussian

Страница 184 из 342
Viktor
09.02.2018
09:47:58
До 3.4??
До 3.6.4, например)

Я мажорной считаю 3.6

yopp
09.02.2018
10:25:28
норм катается же))
обычно из такого накатывается что-то очень страшное

Google
Максим
09.02.2018
10:34:05
Всем привет! Подскажет в монге при создание запроса можно как то взять значение из текущего документа?

yopp
09.02.2018
10:34:36
Что значит «текущего документа»?

keystr0ke
09.02.2018
10:37:06
Видимо имеется ввиду, когда нужно сравнивать одни поля документа с другими. Например получить все документы у которых одинаковые поля

Максим
09.02.2018
10:37:09
который во время поиска монга сравнивает с запросом

Мне нужно найти документы у которых некое поле ScannedOn былло меньше чем текущее время минус заданный интервал в данном документе

что то вроде {"ScannedOn" : { "$lte" : new Date((new Date().getTime()/1000-this.Interval*60)*1000) } }

естественно так не работает

yopp
09.02.2018
10:44:58
В запросе это сделать невозможно. И надеюсь никогда и не будет возможно :)

Это можно сделать в map/reduce

Но всё это звучит как Очень Плохая Идея™

Какую проблему вы решаете?

Nick
09.02.2018
10:49:49
есть один изврат, но никакие индексы работать не будут, поэтому с осторожностью если данных много https://docs.mongodb.com/manual/reference/operator/query/where/

Максим
09.02.2018
10:51:27
т.е строить запросы по коллекции основываясь на данных из документов этой же коллекции противоречит монге?

Google
Максим
09.02.2018
10:56:02
вот так { "$where": function() { return this.ScannedOn <= new Date((new Date().getTime()/1000-this.Interval*60)*1000); } } работает

yopp
09.02.2018
11:52:44
$where это кастрированный map, это Абсолютно Плохая Идея™

$where это легкий способ выстрелить себе в коленку так, что ещё и руки оторвёт :(

я перефразирую свою мысль: если вам так надо выбирать данные, вы вероятно что-то делаете не так

Nick
09.02.2018
12:07:11
Я осознаю что плохой совет и про это предупредил, однако иногда приходится и такое делать

А вот про кастрированный мап спасибо, улучшило понимание

yopp
09.02.2018
12:10:08
там ещё есть $expr, который кастрированный AF

Artur
09.02.2018
13:44:45
Парни, делаю множественную выборку через db.collection("customers").find({ id: { $in: [ 390, 754, 454 ] } }) у меня в БД предположим есть только id 754, и эта функция вернёт только один объект с этим id. Можно ли заставить его возвращать null или пустой объект, если id нет в базе? Чтобы получить что-то типо этого [ { },{id:754, name: 'blabla'},{ } ] ?

необходимо обработать исключение если какого-то id нет в базе, а делать одиночную выборку для всех элементов массива слишком затратно

yopp
09.02.2018
13:49:02
дешевле всего это потом в приложении сделать

Artur
09.02.2018
13:49:25
ну единственный вариант который в голову пришел

сравнивать входной массив, с ключами возвращенного из БД

yopp
09.02.2018
13:49:53
всё именно так

Artur
09.02.2018
13:50:10
надеялся что не увидел чего в доке монги)

спасибо

Максим
09.02.2018
14:02:02
тяжело что-то советовать, если не понятно какую проблему вы решаете
Я бы хотеб выбрать из коллекции только те документы у которых значение поля ScannedOn <= (Date.Now - this.interval)

что тут можно сделать?

yopp
09.02.2018
14:03:39
зачем?

Google
yopp
09.02.2018
14:04:01
в смысле: какую проблему ты решаешь?

мне кажется что тебе нужно поменять схему

(добавив поле NextScanOn)

которое будет равно ScanedOn + Interval

и которое будет устанавливаться когда меняется или ScannedOn или Interval

всё остальное — тлен

ты вместо двух операций сложения заставляешь базу данных делать 2N операций сложений

Максим
09.02.2018
14:08:43
Так и сделаю. Спасибо!

anatolii
09.02.2018
16:12:48
А лучше сделать так: const date = Date.now - SOME_INTERVAL; model.find({ScannedOn: {$lte: date}}) И не хранить интервалы в базе, а оставить как есть дату последнего сканирования

yopp
09.02.2018
16:14:05
Это хорошо, когда интервалы везде одинаковые

А вот когда у разных сущностей разные интервалы или интервалы задаются динамически, то так не сработает.

anatolii
09.02.2018
16:15:04
Это ужасно если они везде разные, один тип действия, один интервал, много типов действий, много интервалов, но все равно они должны лежать отдельно а не в каждом документе.

yopp
09.02.2018
16:16:05
Это вполне себе нормально.

Интервал может динамически высчитываться исходя из предыдущих взаимодействий , их результатов и миллиона других факторов.

Бизнес так хочет™

anatolii
09.02.2018
16:18:50
Я не говорил что это ненормально, я сказал что это ужасно, бесконтрольное обновление. Есть некие действия которые нужно делать с некой переодичностью, и если их все делать одновременно с каким-то одним интервалом кучей, это будет более контролируемо, и более удобно для разработчика + изменяя и подстаивая интервалы можно контролировать нагрузку итд.

особенно если ресурс может отвечать 429

yopp
09.02.2018
17:21:31
Не вижу смысла упражняться, не зная бизнес-задачи. Как архитектурный приём это более чем допустимо

Максим
09.02.2018
17:32:30
По задаче пользователь задает нужный интервал обновления в зависимости от приоритета фильтра так как данные по некоторым фильтрам меняются достаточно редко.

Max
10.02.2018
13:41:44
Ребята, мне нужно бэкенд собрать с авторизацией

Google
Max
10.02.2018
13:41:49
Что заюзать для авторизации?

Если это jwt, то токены надо хранить в базе монго?

Alexander
10.02.2018
13:52:10
Если это jwt, то токены надо хранить в базе монго?
Токен хранить в localStorage, а в монге хранить email и hashPassword

Valeriy
10.02.2018
13:53:23
Что заюзать для авторизации?
Если самому не хочется писать, заюзай Firebase

На клиенте можешь получать jwt, будь это js, ios, android

на бэке просто валидировать

юзеры будут в firebase храниться

Yaroslav
10.02.2018
13:57:34
https://www.rdegges.com/2018/please-stop-using-local-storage/

Max
10.02.2018
13:57:35
в firebase можно хранить другие данные, кроме пользователей?

Yaroslav
10.02.2018
13:57:39
что про это скажете?

Valeriy
10.02.2018
13:59:02
ну на своём бэке можешь хранить

firebase database это уже замена бэку

Max
10.02.2018
14:02:32
с базой данных и авторизацией

кому в личку могу побомбить сообщениями? с меня пиво рублей на 500

Yaroslav
10.02.2018
14:11:37
могу тебе кинуть просто чисто мой бекенд там все это есть

даже один протектед роут

Max
10.02.2018
14:17:15
вау, спасибо, посмотрю

?

Ruslan
10.02.2018
17:12:02
Вопрос по работе бд когда считывается елемент коллекции, он грузится целиком или последовательно?

Google
Ruslan
10.02.2018
17:15:25
хочу понять, что быстрее 1) поиск ключевого слова в одном большом елемнте коллекции 2) поиск ключевого слова среди 1000чи елементов колекции

это как считать весь файл а потом парсить или считывать построчно и парсить

Vlad
10.02.2018
17:18:48
Пока непонятно. Что значит считывание последовательно одного элемента? Он полностью грузится. Как его одного последовательно грузить? Если надо вывести только некоторые поля элемента - да, возможно.

Если есть поле в элементе - не важно какой большой будет элемент, лишь бы индекс на нем был, чтобы фулл скан не проводить

Ruslan
10.02.2018
17:20:39
А пример данных можно?
нелья) и они тут не причем я про алгоритм работы

хорошо скажу проще я хочу считать первый символ из елемента коллекции размером в 1TB

Vlad
10.02.2018
17:21:48
Так по определению 1000 элементов будет дольше искать, чем 1

Ruslan
10.02.2018
17:21:56
что он сделает?

Страница 184 из 342