
Котяй Негодяй
01.01.2018
19:55:56
В 3.6.0 rs.initiate() просто работает, а в 3.6.1 я получаю already initialized.
Баг?

yopp
01.01.2018
20:59:17
rs.status() что говорит?

Aleksandr
01.01.2018
20:59:44
heroku?
зарегался, но ничего не понял, тем более, у них нет rpm'a

Google

yopp
01.01.2018
21:00:26

Aleksandr
01.01.2018
21:27:17

GNU/Docker
01.01.2018
21:33:21
Фритир есть в амазоне
На год

Aleksandr
01.01.2018
21:34:09

GNU/Docker
01.01.2018
21:34:35
Зарегайся в aws
Можно будет хилую виртуалку год гонять.

Aleksandr
01.01.2018
21:35:09
оке, спс

GNU/Docker
01.01.2018
21:35:47
Еще в мирантисе такое было

Moe
01.01.2018
21:41:23
mongo учу только.
вопрос по mongoose.
при создании схемы можно указать unique: true - чтобы поле (допустим. name), в котором указан этот ключ, было уникальным (не повторяющимся) у каждого экземпляра модели, созданной при помощи такой схемы. верно я думаю?
а что будет, если я вдруг в процессе создания экземпляров модели случайно задам для объекта А и для объекта Б поля name с одинаковым значением?
таким образом - объект А и объект Б будут иметь не уникальные поля name.
Что тогда?

GNU/Docker
01.01.2018
21:44:17
Я так понимаю по этому полю создастся индекс
И при вставке будет ошибка.

Google

Moe
01.01.2018
21:47:43

GNU/Docker
01.01.2018
21:48:11
Это вообще первое что надо делать.

Moe
01.01.2018
21:49:00

GNU/Docker
01.01.2018
22:00:26
Лишь бы код не писать)

Котяй Негодяй
01.01.2018
22:58:54
rs.status() что говорит?
Говорит, что конфиг невалидный. По логам вижу, что демон сам при запуске проводит инициализацию.
Запускаю монгу в докере. С флагом --replSet конфиг инициализируется автоматом и нода в нём выглядит вот так:
{ _id: 0,
host: "a06ac5ce2360:27017",
...
Откуда он взял a06ac5ce2360, не понятно. Я пофиксил это костылём, который при создании контейнера вешает хост a06ac5ce2360 на 127.0.0.1, но это ненадёжно, т.к., похоже, что это какой-то хэш, который однажды изменится.
А так всё работает. Если демон находит этот хост, то автоматически делает его мастером.
Но WTF?

anatolii
02.01.2018
03:48:18
Возможно это имя компа (контейнера дркер)

Moe
02.01.2018
07:04:28

Crazy
02.01.2018
13:37:28
Привет парни.
У меня возник вопрос, так как я не силен в backend разработке.
Например у меня есть несколько запросов:
1) this.collection("users").findOne({username})
2) this.collection("users").updateOne({email})
3) this.collection("users").findOne({username, email})
4) this.collection("users").findOne({sid, auth})
Мне нужно сделать индексацию.
Насколько я понял под каждый запрос нужно делать индексы?
А не под каждое поле. И ещё допустим есть составной индекс из Id, username, auth. Если в запросе меньше полей то этот индекс будет бесполезным ? Поэтому нужно создавать под каждый запрос отдельный индекс?

yopp
02.01.2018
14:36:15
Третий запрос будет использовать пересечение индексов
Индекс с sid и auth не нужен, если sid уникален. Но вообще в этом случае лучше в отдельной коллекции и sid в _id

Котяй Негодяй
02.01.2018
16:46:05

anatolii
02.01.2018
16:48:34

Crazy
02.01.2018
17:17:20

yopp
02.01.2018
17:19:05
Я такого не говорил. Я говорил что если sid уникален есть смысл вынести эти данные в отдельную коллекцию и засунуть sid в id (если он меньше 1024 байт)

Котяй Негодяй
02.01.2018
17:19:38

Google

yopp
02.01.2018
17:19:43
А в случае с compound индексом, нет смысла делать постфикс, если префикс уникальный

Котяй Негодяй
02.01.2018
17:20:00
mongoInit.js:
/* globals rs */
rs.initiate({
_id: 'rs0',
members: [
{ _id: 0, host: '127.0.0.1:27017' },
],
})
rs.initiate() просто так не работает.

Crazy
02.01.2018
17:58:45

yopp
02.01.2018
18:00:30
Окей, спасибо
Если у пользователей больше одного sid то можно и в поддокументе оставить

Котяй Негодяй
02.01.2018
18:01:46
Или, хотя бы, настройки снаружи.

yopp
02.01.2018
18:02:49
Не хочу быть занудой, но я уже давал ссылку на документацию. Там понятным языком со ссылками всё описано.
Optional. A document that specifies configuration for the new replica set. If a configuration is not specified, MongoDB uses a default replica set configuration.

Котяй Негодяй
02.01.2018
18:03:50
Прошу прощения. =)

yopp
02.01.2018
18:03:54
И автонастройки в каком виде?

Котяй Негодяй
02.01.2018
18:06:02
Настройки чего?
Чтобы не пришлось отдельно подключасться и дёргать rs.initiate(), а, скажем, передавать соответствующий аргумент при запуске. Это может быть полезно при контейнеризации. Например, сейчас мне приходится ради 1 команды поднимать отдельный контейнер рядом.

yopp
02.01.2018
18:06:22
Это убер хреновая идея

Котяй Негодяй
02.01.2018
18:06:26
Как бы, несложно и не накладно, т.к. он сразу умирает, но костыль.

yopp
02.01.2018
18:07:29
В моем опыте, все попытки автоматом разворачивать кластер заканчивались тем, что в один прекрасный день кластер по новой всесело разворачивался поверх данных.
Хочешь играть в русскую рулетку, пиши свои entrypoint скрипты

Котяй Негодяй
02.01.2018
18:09:53
Ну, в данном случае, я дклаю это всё только ради возможности подписаться на изменения в коллекциях.

Google

yopp
02.01.2018
18:09:57
Задача надежно инициализировать кластер в общем виде не решается. Нужны внешние протоколы консенсуса, да и с ними тоже возможно наколоться.

Котяй Негодяй
02.01.2018
18:11:01
О кластере пока речь даже не идёт. На данном этапе не нужно.

yopp
02.01.2018
18:11:10
Реплика — кластер.
Я понимаю твою боль, но она оправдана.

Котяй Негодяй
02.01.2018
18:11:39
Да, но суть в том, что это кластер из одного инстанса.

yopp
02.01.2018
18:12:05
Напиши свой entrypoint

Котяй Негодяй
02.01.2018
18:12:25

yopp
02.01.2018
18:13:28
Не знаю. По вопросам как жить с докером лучше идти на девопс канал

Котяй Негодяй
02.01.2018
18:13:35
А могу ли я переопределить дефолтный Replica Set конфиг? Где он лежит? Честно, уже искал. =)

yopp
02.01.2018
18:13:42
Не можешь
Реплика сеты автоматически не разворачиваются.
Это by design.
Хочешь разворачивать автоматом — в другой чат.

Котяй Негодяй
02.01.2018
18:14:49
Ок.
Ну и это пока дев инстанс.

yopp
02.01.2018
18:15:30
В самой монге по ряду обоснованных причин для этого нет инструментов.
Есть ops manager

Котяй Негодяй
02.01.2018
18:15:47
Хорошо. Спасибо. =) Прояснилось.

yopp
02.01.2018
18:15:52
Но я не уверен что он скриптуется

Google

Crazy
02.01.2018
19:47:48
Но я не уверен что он скриптуется
Еще раз привет.
Я плохо знаю английский, но вроде в документации написано что можно создавать составные индексы, а запросы не обязательно должны включать все поля.
Для _id у меня по умолчанию создается индекс.
А на счет сортировки - только по _id и нигде больше.
Могу ли например теоретически создать такой составной индекс: {
sid: 1,
auth: 1,
id: 1,
email: 1,
code: -1,
username: -1,
}
А когда делаю запросы на выборку то, иногда включаю 3 поля, иногда 2, а иногда только одно?

Elena
02.01.2018
19:51:13
Ребят, есть возможность нормально установить монго на 7 винду?

Crazy
02.01.2018
19:55:37
а все понял

yopp
02.01.2018
20:32:58
Еще раз привет.
Я плохо знаю английский, но вроде в документации написано что можно создавать составные индексы, а запросы не обязательно должны включать все поля.
Для _id у меня по умолчанию создается индекс.
А на счет сортировки - только по _id и нигде больше.
Могу ли например теоретически создать такой составной индекс: {
sid: 1,
auth: 1,
id: 1,
email: 1,
code: -1,
username: -1,
}
А когда делаю запросы на выборку то, иногда включаю 3 поля, иногда 2, а иногда только одно?
Составные индексы работают слева на право. Это значит что тебе для использования индекса нужно в запросе использовать поля в «порядке» в котором они указаны в индексе.
Грубо говоря составной индекс — матрешка. Верхняя матрешка самое левое значение.
Это значит что в твоём примере без указания условия с полем sid индекс использоваться не будет.

Crazy
02.01.2018
20:33:30

yopp
02.01.2018
20:33:37
На практике нужно считать compound индекс — уточняющим индексом. Как в почтовом адресе.

Crazy
02.01.2018
20:34:22
?

Mykola
03.01.2018
00:40:51
Если я Model.find({}) мангус возвращает же query не курсор ?. И зате я могу .then и уже использовать данные

Yura
03.01.2018
11:20:53
Добрый день, уважаемые монговоды :-)
Кто интимно знаком со внутренним устройством, можете подсказать?
Есть желание сделать драйвер, посылающий запросы в одно соединение асинхронно пайплайном. Протокол вроде на это расчитан (есть поле requestid и response_for). Но меня пугают, что запросы из одного коннекта будут обрабатываться строго по очереди (что, естественно, не айс).
Так ли это? Или меня зря пугают?

yopp
03.01.2018
12:54:45
О, привет.
Afair пугают правильно.
Можно посмотреть на client sessions из 3.6, возможно с ними получится сделать что ты хочешь.
Точно в nodejs и c драйверах уже впилено. В руби пару недель назад только куски в транке были
А зачем тебе это?