CC-BY-SA-4.0/Docker-ce30.0
На год
CC-BY-SA-4.0/Docker-ce30.0
Зарегайся в aws
CC-BY-SA-4.0/Docker-ce30.0
Можно будет хилую виртуалку год гонять.
ghett
оке, спс
CC-BY-SA-4.0/Docker-ce30.0
Еще в мирантисе такое было
Anonymous
mongo учу только.
вопрос по mongoose.
при создании схемы можно указать unique: true - чтобы поле (допустим. name), в котором указан этот ключ, было уникальным (не повторяющимся) у каждого экземпляра модели, созданной при помощи такой схемы. верно я думаю?
а что будет, если я вдруг в процессе создания экземпляров модели случайно задам для объекта А и для объекта Б поля name с одинаковым значением?
таким образом - объект А и объект Б будут иметь не уникальные поля name.
Что тогда?
CC-BY-SA-4.0/Docker-ce30.0
Я так понимаю по этому полю создастся индекс
CC-BY-SA-4.0/Docker-ce30.0
И при вставке будет ошибка.
CC-BY-SA-4.0/Docker-ce30.0
Это вообще первое что надо делать.
CC-BY-SA-4.0/Docker-ce30.0
Лишь бы код не писать)
Anonymous
rs.status() что говорит?
Говорит, что конфиг невалидный. По логам вижу, что демон сам при запуске проводит инициализацию.
Запускаю монгу в докере. С флагом --replSet конфиг инициализируется автоматом и нода в нём выглядит вот так:
{ _id: 0,
host: "a06ac5ce2360:27017",
...
Откуда он взял a06ac5ce2360, не понятно. Я пофиксил это костылём, который при создании контейнера вешает хост a06ac5ce2360 на 127.0.0.1, но это ненадёжно, т.к., похоже, что это какой-то хэш, который однажды изменится.
Anonymous
А так всё работает. Если демон находит этот хост, то автоматически делает его мастером.
Anonymous
Но WTF?
Анатолий
Возможно это имя компа (контейнера дркер)
Ilyas
Привет парни.
У меня возник вопрос, так как я не силен в 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})
Мне нужно сделать индексацию.
Насколько я понял под каждый запрос нужно делать индексы?
Ilyas
А не под каждое поле. И ещё допустим есть составной индекс из Id, username, auth. Если в запросе меньше полей то этот индекс будет бесполезным ? Поэтому нужно создавать под каждый запрос отдельный индекс?
yopp
yopp
Третий запрос будет использовать пересечение индексов
yopp
Индекс с sid и auth не нужен, если sid уникален. Но вообще в этом случае лучше в отдельной коллекции и sid в _id
Anonymous
Ilyas
Ilyas
yopp
Я такого не говорил. Я говорил что если sid уникален есть смысл вынести эти данные в отдельную коллекцию и засунуть sid в id (если он меньше 1024 байт)
Anonymous
У меня, к примеру, при пустоц инициализации репликации монга добавлялась как "mongo1:1700"
mongo-dev:
image: mongo:3.6.1-jessie
container_name: mongo-dev
hostname: localhost
ports:
- '27017:27017'
command: mongod --replSet "rs0"
mongo-rs-dev:
image: mongo:3.6.0-jessie
container_name: mongo-rs-dev
depends_on:
- mongo-dev
links:
- mongo-dev:mongo
volumes:
- ./src/back/mongoInit.js:/mongoInit.js:ro
command: mongo "mongo:27017" "/mongoInit.js"
yopp
А в случае с compound индексом, нет смысла делать постфикс, если префикс уникальный
Anonymous
Anonymous
mongoInit.js:
/* globals rs */
rs.initiate({
_id: 'rs0',
members: [
{ _id: 0, host: '127.0.0.1:27017' },
],
})
Anonymous
rs.initiate() просто так не работает.
Ilyas
yopp
Окей, спасибо
Если у пользователей больше одного sid то можно и в поддокументе оставить
Anonymous
Или, хотя бы, настройки снаружи.
yopp
Не хочу быть занудой, но я уже давал ссылку на документацию. Там понятным языком со ссылками всё описано.
yopp
Optional. A document that specifies configuration for the new replica set. If a configuration is not specified, MongoDB uses a default replica set configuration.
Anonymous
Прошу прощения. =)
yopp
yopp
И автонастройки в каком виде?
Anonymous
Настройки чего?
Чтобы не пришлось отдельно подключасться и дёргать rs.initiate(), а, скажем, передавать соответствующий аргумент при запуске. Это может быть полезно при контейнеризации. Например, сейчас мне приходится ради 1 команды поднимать отдельный контейнер рядом.
yopp
Это убер хреновая идея
Anonymous
Как бы, несложно и не накладно, т.к. он сразу умирает, но костыль.
yopp
В моем опыте, все попытки автоматом разворачивать кластер заканчивались тем, что в один прекрасный день кластер по новой всесело разворачивался поверх данных.
yopp
Хочешь играть в русскую рулетку, пиши свои entrypoint скрипты
Anonymous
Ну, в данном случае, я дклаю это всё только ради возможности подписаться на изменения в коллекциях.
yopp
Задача надежно инициализировать кластер в общем виде не решается. Нужны внешние протоколы консенсуса, да и с ними тоже возможно наколоться.
Anonymous
О кластере пока речь даже не идёт. На данном этапе не нужно.
yopp
Реплика — кластер.
yopp
Я понимаю твою боль, но она оправдана.
Anonymous
Да, но суть в том, что это кластер из одного инстанса.
yopp
Напиши свой entrypoint
yopp
Не знаю. По вопросам как жить с докером лучше идти на девопс канал
Anonymous
А могу ли я переопределить дефолтный Replica Set конфиг? Где он лежит? Честно, уже искал. =)
yopp
Не можешь
yopp
Реплика сеты автоматически не разворачиваются.
yopp
Это by design.
yopp
Хочешь разворачивать автоматом — в другой чат.
Anonymous
Ок.
Anonymous
Ну и это пока дев инстанс.
yopp
В самой монге по ряду обоснованных причин для этого нет инструментов.
yopp
Есть ops manager
Anonymous
Хорошо. Спасибо. =) Прояснилось.
yopp
Но я не уверен что он скриптуется
Ilyas
Но я не уверен что он скриптуется
Еще раз привет.
Я плохо знаю английский, но вроде в документации написано что можно создавать составные индексы, а запросы не обязательно должны включать все поля.
Для _id у меня по умолчанию создается индекс.
А на счет сортировки - только по _id и нигде больше.
Могу ли например теоретически создать такой составной индекс: {
sid: 1,
auth: 1,
id: 1,
email: 1,
code: -1,
username: -1,
}
А когда делаю запросы на выборку то, иногда включаю 3 поля, иногда 2, а иногда только одно?
Elena
Ребят, есть возможность нормально установить монго на 7 винду?
Ilyas
Ilyas
а все понял
yopp
Еще раз привет.
Я плохо знаю английский, но вроде в документации написано что можно создавать составные индексы, а запросы не обязательно должны включать все поля.
Для _id у меня по умолчанию создается индекс.
А на счет сортировки - только по _id и нигде больше.
Могу ли например теоретически создать такой составной индекс: {
sid: 1,
auth: 1,
id: 1,
email: 1,
code: -1,
username: -1,
}
А когда делаю запросы на выборку то, иногда включаю 3 поля, иногда 2, а иногда только одно?
Составные индексы работают слева на право. Это значит что тебе для использования индекса нужно в запросе использовать поля в «порядке» в котором они указаны в индексе.
Грубо говоря составной индекс — матрешка. Верхняя матрешка самое левое значение.
Это значит что в твоём примере без указания условия с полем sid индекс использоваться не будет.
Ilyas
yopp
На практике нужно считать compound индекс — уточняющим индексом. Как в почтовом адресе.
Ilyas
👍
Mykola
Если я Model.find({}) мангус возвращает же query не курсор ?. И зате я могу .then и уже использовать данные
Yura
Добрый день, уважаемые монговоды :-)
Yura
Кто интимно знаком со внутренним устройством, можете подсказать?
Есть желание сделать драйвер, посылающий запросы в одно соединение асинхронно пайплайном. Протокол вроде на это расчитан (есть поле requestid и response_for). Но меня пугают, что запросы из одного коннекта будут обрабатываться строго по очереди (что, естественно, не айс).
Так ли это? Или меня зря пугают?