
redbeard
27.05.2018
14:01:36
то есть, имеет смысл брать тазики с большим кол-вом рамы?

Nick
27.05.2018
14:19:08
Т.е надо начать делать и получать данные, когда вы точно опрелите круг задач и форматы данных и наберетесь тпыта эксплуатации монги, то уже сможете скорректировать ваши хранилища
Много памяти хорошо когда железо свое, еслм аренда то лишние траты

redbeard
27.05.2018
14:23:45
то есть, иначе, монга под эти задачи, в принципе, годится, нужно будет только подтюнить?

Google

Nick
27.05.2018
14:36:29
Да
Готовьтесь только заранее что скорее всего через некоторое время вам придется пересматривать структуру данных, если захотите шардирование, либо сразу на это закладывайиесь.

redbeard
27.05.2018
15:00:20
да, скорее всего, валить будет много. спасиба :)

George
27.05.2018
17:05:50
Всем привет. Столкнулся с проблемой update.
Кейс:
Нужно найти документы по определенному признаку и в найденных записать 0 в предпоследнее значение массива, который является одним из полей.
Теоретически, должно быть что-то типа вот такого:
db.items.update({%условия поиска%}, { $set : { "array.-2" : 0}})
, но там не работает обращение по негативному индексу, как, например в position.
В общем перепробовал уже кучу вариантов, но чет не нахожу решения.

yopp
27.05.2018
18:02:42
Основное свойство чатов: короткое время актуальности. Через сутки, сообщение скорее всего больше никогда не будет повторно прочитано.
Вам надо будет хранить очень много данных, очень и очень дёшево. И совсем ничтожную часть данных держать горячей
В монге вы хорошо сможете это решить шардированием, но придётся немного повозиться.
Если нужно потом делать аналитику, то сложнее. Но тоже решаемо.


agic
28.05.2018
16:02:16
вопрос не по монго ну может кто знает
find({ "answer.0.results.0.to" : "tatata", date: {$gte: ISODate("2018-05-28T18:22:58Z")}}) такой вот запрос в монго вполне рабочий
`my $now = DateTime->now;
my $n_minutes_ago = $now->add( minutes => -3 );
my $then = DateTime->now( time_zone => 'Europe/Moscow' )->truncate( to => 'minute' )->add( minutes => -3 );
my $cnt = $users->find({ "answer.0.results.0.to" => $arg1, "date" => {'$gte' => $then}});`
может кто увидит где я с датами накосячил (
2018-05-28T18:47:00 print then
а он выводит все что есть по запросу как будто игнорируя gte

Nick
28.05.2018
16:07:54
используйте 3 обратных апострофа или как они называются

agic
28.05.2018
16:13:10
поясните

Илья
28.05.2018
16:16:18
копируя сюда многострочный код лучше использовать три обратных апострофа
` ` `
текст
текст
` ` `
вот так (только между апострофами пробелов не должно быть)

Google

Илья
28.05.2018
16:16:52
иначе парсер телеграмма может корёжить код как ему вздумается

agic
28.05.2018
16:33:28
я уже всю голову поломал
и пробывал и тройные кавычки и экранирование, и экранирование экранирование

Denis
28.05.2018
16:47:04

Илья
28.05.2018
16:47:30
если "тгдесктоп" это официальный, то всегда умел

John
28.05.2018
17:25:25
Ребят почему может не работать index({ createdAt: 1 }, { expires: '1m' });

Nick
28.05.2018
17:43:16

John
28.05.2018
17:47:42
timestamps: true, оно же в нужном формате создается
я там форматами дат нигде не управляю

Nick
28.05.2018
17:49:12
"timestamps: true" это кто делает?
точнее опция к чему

John
28.05.2018
17:49:28
mongoose
к схеме
const RegSchema = Schema(
{
username: {
type: String,
required: true,
unique: true,
},
contacts: {
type: String,
required: true,
},
status: {
type: String,
enum: ['awaiting', 'rejected', 'approved'],
default: 'awaiting',
required: true,
},
},
{ timestamps: true },
);
RegSchema.index({ createdAt: 1 }, { expires: '1m' });

Nick
28.05.2018
17:50:21
а ьеперь залезте в базу и гляньте в каком виде там

John
28.05.2018
17:52:13
в ISO, вроде так и должно быть
{
"_id" : ObjectId("5b0c417cfca6fd103435381a"),
"status" : "awaiting",
"username" : "кккккккккккккккк",
"contacts" : "кккккккккккккккк",
"createdAt" : ISODate("2018-05-28T17:50:52.793Z"),
"updatedAt" : ISODate("2018-05-28T17:50:52.793Z"),
"__v" : 0
}

Andrew
28.05.2018
17:55:16
Ребят, есть тут кто юзает mlab? У меня только что БД упала, локально и на хостинге. Может, Кто знает в чем трабла ( может там обновление какое или еще что ).
Код на хостинге не трогал, т.е. проблема в млаб

Nick
28.05.2018
17:57:13

John
28.05.2018
17:57:50
да, но я пробовал по разному и 3600

Google

Nick
28.05.2018
17:58:14
3600 - эквивалент часу
там ж секунды

John
28.05.2018
17:58:43
это я потом уже понял, 60 тоже пробовал
дело не в этом мне кажется

Nick
28.05.2018
17:59:14
а индекс пересоздавали?
советую сейчас првоерит ькакие нидексы созданы в базе

John
28.05.2018
17:59:42
у меня для сессий connect-mongo тоже задает expires, так вот для сессия в базе появляется поле expire, а тут его нет
дропал и создавал по новой раз 10)
{
"v" : 2,
"key" : {
"createdAt" : 1
},
"name" : "createdAt_1",
"ns" : "db.regs",
"expireAfterSeconds" : 60,
"background" : true
}

Nick
28.05.2018
18:07:19
вроде выглядит верно, а время на сервере в какой таймзоне?

John
28.05.2018
18:19:25
ISODate("2018-05-28T18:19:16.211Z")
я сейчас на сервер UTC поставил, чтобы совпадало
но похоже это не помогло
А нет помогло)
Спасибо))

Alexander
29.05.2018
04:51:43
Всем привет. Подскажите, плиз, есть коллекция: { _id: ..., author: '...', text: '...' }
как сделать выборку с группировкай по автору?

Nick
29.05.2018
06:16:01

Alexander
29.05.2018
06:17:24

Nick
29.05.2018
06:18:28
тогда вам в aggregation и там соотвественно group

Google

Viktor
29.05.2018
07:51:23
доброго времени суток, на реплика-сете стоит монга 3.4.3, могу ли я безопасно отсоединять от реплики по одному серверу и апгрейдить их до 3.4.15?
т.е. отсоединил, обновил и сразу заново в реплика сет подключил инстанс

Artem
29.05.2018
07:53:04
а зечем отсоединять?
остановил репликацию, погасил софт, обновил, запустил

Анатолий
29.05.2018
08:50:44
Привет! Кто может подсказать почему если указать в db.collection.find().skip(3400) - запрос начинает долго висеть и выбирает 100000 документов. А всего их 3600?
точнее будет сказать что в запросе идут limit(20).skip(3400) - т.е. я делаю пагинацию/постраничку

Nick
29.05.2018
08:52:52
сначала скип потом лимит

Анатолий
29.05.2018
08:55:03
нету разницы. всё равно находит больше результатов чем их есть
какая-то хрень =(
в db.currentOp() - numYields это не количество результатов?

yopp
29.05.2018
10:31:12

Анатолий
29.05.2018
10:31:46
в find 3600 запросов
а когда делаю find.skip.limit - зависает и numYields растет
если я правильно понимаю explain - почему то идёт по всем документам в коллекции вообще
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 20,
"executionTimeMillis" : 1509937,
"totalKeysExamined" : 19542300,
"totalDocsExamined" : 19542300,

yopp
29.05.2018
10:34:45
Ну да. А как вы ещё ожидаете будет работать skip и limit без индекса?

Анатолий
29.05.2018
10:35:37
а почему на обычный find не делает такое?

Viktor
29.05.2018
10:35:39

Анатолий
29.05.2018
10:35:46
и когда skip маленький - тоже не делает
а когда на последнюю страницу в постраничной навигации кликаешь - начинается такая хрень

Google

Nick
29.05.2018
10:37:26
а какое услвоие в самом find?

yopp
29.05.2018
10:38:19
а почему на обычный find не делает такое?
Потому что find возвращает курсор. Find без условий открывает курсор с $natural сортировкой без условий.
Если вы не итерируете курсор, то такой запрос будет выполнятся быстро, потому что это начало списка. Чем ближе к концу, тем больше документов надо перебрать.
Добавление skip просто автоматически проматывает курсор вперёд на X документов

Анатолий
29.05.2018
10:39:50
у меня find с сортировкой
когда делаю count - сразу возвращает сколько результатов - 3600
получается, если сделать skip - то он начнет искать по всей коллекции?
не смотря на то что уже нашел эти 3600?

yopp
29.05.2018
10:41:16
Я не понимаю что вы говорите

Анатолий
29.05.2018
10:41:32
вот find нашел 3600 записей по индексу

yopp
29.05.2018
10:41:51
Приведите примеры запросов, так будет проще.

Анатолий
29.05.2018
10:41:53
получается мне проще просто итерировать эти записи скажем в php, чем делать skip в mongodb?

Nick
29.05.2018
10:41:57

yopp
29.05.2018
10:42:17