yopp
Но на деле проще развернуть локальный днс
Ilyas
Да у меня просто авторизация включена, поэтому.
Если я прописал 0.0.0.0 я могу сделать rs.add("ip") вместо rs.add("hostname"), или это не связано с этим?
Прошу прощение за незнания, я впервые работаю с базой данных, поэтому сложно разбираться в администрировании
yopp
Кажется можно и по ip
Ilyas
Окей, спасибо, попробую
yopp
Но если это продакшен, то лучше найти способ честно развернуть с dns
yopp
Так будет проще администрировать потом
Ilyas
Окей, благодарю
Ilyas
Так будет проще администрировать потом
Привет. У меня возникла еще одна трудность(
Репликацию я настроил.
Есть 3 сервера: primary, secondary, arbiter.
Когда я подключаюсь с другого сервера, например NodeJS сервер, как клиент и пишу такое:
mongodb://login:password@ip1:27017,ip2:27017/database?replicaSet=database&authSource=admin
Выходит ошибка:
MongoError: failed to connect to server [database-arbiter.me:27017] on first connect [MongoError: getaddrinfo ENOTFOUND database-arbiter.me database-arbiter.me:27017]
Не знаешь в чем дело?
Ilyas
А понял. Нужно было и на клиенте добавить все узлы реплики в файл /etc/hosts
yopp
database-arbiter.me не резолвится
Ilyas
Не это я добавил в /etc/hosts -> ip database-arbiter.me
Ilyas
Просто у меня что-то добавление типа rs.add("ip") не получалось не помню какая ошибка была, а rs.add("hostname") добавляется после добавления в /etc/hosts
Dmitry
Привет, курю маны и гугл на тему работы с $addToSet, насколько я понял оно работает только с полностью идентичными документами, если отличается хотя бы _id, то документ уже считается уникальным и вставляется в массив. Но вот никак не могу сообразить как вставить несколько документов за раз в массив, предварительно проверив существующие по конкретному полю. Направьте меня пожалуйста в нужную сторону?
Dmitry
Возможно нужно копать в другую сторону, например $push + $each или что-то такое
yopp
Если я правильно понимаю задачу: то так не выйдет.
yopp
Либо проверяете на клиенте и делаете оптимистичный лок, либо по одному
yopp
Какую задачу вы в итоге хотите решить?
Dmitry
У меня теги в виде поддокументов: {_id, title}, я передаю новый список тегов с клиента и мне нужно добавить те, которые есть в новом списке, но нет в монге (сравнивая по полю title), и удалить те, которых нет в новом списке, но есть в монге. Остальные не трогать.
Я могу это решить на стороне клиента, загрузив список документов с тегами, там обработать и отправить обратно через $set. Но я предположил, что можно это реализовать на уровне субд
yopp
Уберите title и оставьте только _id. Тайтлы доставайте из коллекции с тегами отдельным запросом.
yopp
Если критична вставка. Если критично чтение, то тогда на клиенте.
Dmitry
хм, так это приём из релативной бд, где каждая сущность в своей коллекции и связана по _id, монга же не такая?
yopp
Монга любая, в этом весь кайф. Можно выбрать любую градацию между денормализацией и нормализацией
yopp
Вообще я вижу мало смысла в хранении тегов в виде id
yopp
Либо вы храните просто текст, либо вы храните только id
yopp
Хранить оба значения — бессмысленно.
yopp
Обновление имени тега будет требовать обновления всех документов, а значит профита от хранения id нет
Dmitry
я еще не осилил главу про индексацию, возможно с моей стороны это действительно было усложнением. Но я предполагал, что документ с тегом у меня будет сложнее, например не только title, но и нормализованный url и что-то еще...
yopp
Сначала определитесь как вы будете использовать документ внутри приложения.
yopp
Плюс оцените что у вас преобладает: запись или чтение.
Dmitry
как обычные теги, формировать ссылку на выборку типа
/tags/:tagName
Dmitry
преобладает чтение
Dmitry
я попробую преобразовать теги в обычный массив строк, на данном этапе я ничего не теряю, а дальше посмотрим
Dmitry
но тогда вопрос в догонку, как реагирует монга на смену _id у поддокумента? Например у меня есть {id: 1, title: 'apple'}, я меняю на {id: 2, title: 'apple'}
ей придётся перестраивать индексы или как?
Dmitry
или вообще всё равно
Dmitry
или я загоняюсь над предварительной оптимизацией
yopp
id — immutable.
yopp
Можно только удалить старый документ и создать новый
yopp
Если не нужно искать по строке, всегда можно построить вторичный hashed индекс по title и использовать его.
yopp
А сколько вообще документов планируется сейчас?
Dmitry
сейчас около тысячи документов в которых есть массив с тегами, в среднем 3-4 тега на документ
Dmitry
мало
Dmitry
планируется не больше десятка тысяч документов
yopp
Тогда делайте так, как будет быстрее разрабатывать.
Dmitry
верно, спасибо!
yopp
Я бы остановился на массиве текстовых тегов
Сергей
/
Oleg
ребят привет. может кто рассказать про методы инкрементального бэкапа в монге. как делаете ?
Старый
Старый
остальное мазахизм
Sergey
Реплика - это не бекап
Sergey
Реплика - это реплика
Sergey
Из реплики данные недельной давности ты не достанешь, при необходимости.
yopp
Zloy-Dobry
jamshoot)
Max
Никак. Hidden member + fs snapshot
мы тут у себя сделали типа
—query "{XXX_time: {\$gte: ${DATE_FROM}, \$lte: ${DATE_TILL}}}"
DATE_FROM и DATE_TILL заполняются за вчерашнее число
понятно, что это одна коллекция, но может помочь, если в коллекции есть нужные данные к которым можно привязаться
yopp
Это не инкрементальный бэкап. И вообще это очень сомнительный способ
Max
я согласен
но умнее не придумал
У нас снапшот делается 1 раз в месяц, а вот тяжелая коллекция сохраняется таким образом, по $lte/$gte
Max
дальше всё догоняется
и после снапшота старые данные удаляются
теоретически оно ж должно сработать при восстановлении базы - т.е. вливание пачки bson-ов по очереди приведет базу к нужному состоянию
yopp
Инкрементальный бекап при должной сноровке можно сколхозить из оплога.
yopp
Всё остальное это уже экспорт на уровне приложения и тут надо быть крайне осторожным и иметь постоянную автоматическую верификацию.
Viktor
По идее в 3.6 с changeStream'ами возможности поколхозить прибавится
Viktor
Прибавилось*
Ilyas
Привет Парни! Возник вопрос с датой и временем, может кто то сталкивался или просто скажите свое мнение.
У меня на сайте есть аналитика визитов страниц.
У каждого человека есть страница.
А в аналитике я должен выдавать сколько посещений было в конкретный день, чисто типо того: 01.02.17 без секунд и прочего.
Понятно что можно хранить UTC в базе данных, но тогда для определения точной даты мне нужно будет хранить данные в секундах как минимум, это может достигать до 86,400 документов в mongodb, если каждую секунду страницу пользователя будут посещать.
На данный момент поддерживать все это мне сложно будет.
Решил сделать так, хранить в базе пользователя локальное время того человека, страницу которого посещают другие пользователи.
И в аналитике например вывести например: Данные соответствуют времени: UTC +3.
Это нормально?
Да может человек переместится в другое место, с другим часовым поясом или может он зарегается в одной стране а живет в другой и через неделю приедет обратно домой.
Но все таки если я не могу записывать документы в mongodb ежесекундно, это оптимальный вариант?
Igor
Oleg
и еще вопрос: у меня монга 3.2.18 WT. почему то залезла в СВОП, хотя на хосте еще 5гб фри памяти. это норм поведение ?
Anonymous
гайз, я основы mongoose только изучил пока
нашел статью по MEVN ( mongo+express+vue+node )
автор создает route:
// Fetch all posts
app.get('/posts', (req, res) => {
Post.find({}, 'title description', function (error, posts) {
if (error) { console.error(error); }
res.send({
posts: posts
})
}).sort({_id:-1})
})
мне непонятен аргумент 'title description' в его коде - что он значает?
Дима
Добрый день
Дима
Подскажите пожалуйста, как произвести поиск в коллекции по id? Есть коллекция posts, надо найти post по get параметру
Дима
Структура такая:
Дима
{ _id: 5a55bede5811571afba5f918,
title: 'Vue 2.0 Hello World',
text: 'Welcome!' },
Дима
Надо ли добавлять свое поле id помимо _id?
Дима
Чтобы потом вывести из коллекции объект в таком виде: db.collection("posts").find({id:1})
Alexander
а чем не устраивает _id ?
Alexander
в монге в качестве айдишника uuid
Anonymous
Дима
Дима
Допустим я создал 3 поста
Alexander
find({_id: ObjectId("uuid_string")});
Дима
И хочу вывести последний