Sergey
Ну про CR речи не идёт
Alex
Подскажите, как правильно фильтровать данные. Есть вот такая коллекция: {a: 1, b: 'x'} {a: 1, b: 'y'} {a: 3, b: 'z'} Хочу фильтровать ее, используя такой массив: [{a: 1, b:'y'}, {a: 3, b:'z'}] Т.е. в результате должно остаться только: {a: 1, b: 'x'}
Alex
никак не пойму, как мне это правильно сделать
yopp
Если я тебя правильно понял, ты хочешь исключить из результатов несколько документов по совпадению двух ключей a и b?
Alex
совпадение двух ключей из объекта, который в массиве, т.е. таких пар ключей может быть больше 1
Alex
я пробовал строить массивы из фильтра, массив значений a и b, а потом использовать $nin, но получилось как-то не так
yopp
Иди перечитывай про запросы
yopp
$nin тебе не нужен
yopp
Тебе нужно внимательно читать
yopp
Из твоей не очень внятной постановки задачи можно сделать только один вывод — ты решаешь свою задачу совершенно неправильно
yopp
Начать нужно с простого: логических операций $or и $and
yopp
И разобраться наконец с тем, как вообще работает язык запросов в монге.
yopp
Потому что $nin не для этого совершенно, у него семантика иная
Alex
понятно
yopp
Попробуй пробежать глазами по query lang и переосмыслить свою задачу
yopp
начинать рекомендую вот от сюда: https://docs.mongodb.com/manual/tutorial/query-documents/
yopp
и вот отсюда: https://docs.mongodb.com/manual/reference/operator/query/
yopp
ну и за одно убедится что концепция документов до конца понятна. это тут https://docs.mongodb.com/manual/core/document/
yopp
Спойлер: тебе надо (a == a1 && b == b1) || (a == a2 && b == b2). массивы не покатят
Sergey
Люди, нужен спец по монге на проект по апгрейду с версии 2.2.7 на 3.х, на хаускипинг и на разовые мелкие задачи. Система в Питере. Два шарда. Всего данных условно два раза по 100гб. Кто готов поговорить? Или может быть посоветует кого?
yopp
Я готов поговорить
yopp
чот нету ;)
неделька выдалась сильно сложнее чем бы я хотел. на этой должен добраться
yarastqt [msk +1 week]
Привет, подскажите по монге, допустим есть простая схема: { property: { type: [String] } } Есть поле - массив, дак вот, можно ли как-то при валидации этого поля кинуть ошибку для какого-то конкретно значения? Просто если делать к примеру так: Schema.path('property').validate(function () { ... }, 'Property error'); То в ошибке у нас будет весь массив
Cap
{ "58f5b2530a975a13fb0c21ff" : { "persName" : "Огонек" }, "58f5b2530a975a13fb0c2200" : { "persName" : "Дриада" }, ..... } как мне перебрать эти поля (58f5b2530a975a13fb0c21ff ..) в forEach ?
yopp
3.4.4 на подходе: https://docs.mongodb.com/manual/release-notes/3.4-changelog/#id1
yopp
{ "58f5b2530a975a13fb0c21ff" : { "persName" : "Огонек" }, "58f5b2530a975a13fb0c2200" : { "persName" : "Дриада" }, ..... } как мне перебрать эти поля (58f5b2530a975a13fb0c21ff ..) в forEach ?
эти «поля» называются ключом. Суяд по forEach разговор или о mongoshell или о ноде. В самой монге нет forEach.
yopp
чот нету ;)
сегодня будет докеровский контейнер, 1 экспортер на одну ноду и замена конфига на параметры и envvar
Aleksey
йуху!
yopp
если мне опенстек ещё рогов не накрутит
yopp
не могу нормально собрать тестовый стол, блин :(
yopp
¯\_(ツ)_/¯
yopp
как хочешь!
Aleksey
tnx
yopp
tnx
зачем оно тебе?
Aleksey
http://lesswrong.ru/w/%D0%9F%D0%B0%D1%86%D0%B8%D1%84%D0%B8%D0%B7%D0%BC_%D0%B3%D1%83%D0%B1%D0%B8%D1%82_%D1%83%D1%85%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B0%D0%B4%D1%8B
Aleksey
так что что бы не понижать уровень дискуссии
yopp
так у нас тут нормальные дискуссии
yarastqt [msk +1 week]
Думаю что никак, потому что валидаторы работают целиком на значении ключа. Но валиадация новая поделка, могу не знать.
Да, походу так и есть. Можно конечно ещё заморочиться типо в хуке сделать invalidate и туда прокинуть значение, но это чет слишком запарно мне кажется
yarastqt [msk +1 week]
Просто не совсем понимаю пока щас, как обрабатывать такие ошибки, т.е. на клиент в итоге приходит ошибка а в нем все значения и в форме соот-но тоже подсвечиваются все поля как не валидные
yopp
Если по чесноку, я считаю что нельзя эти валидаторы использовать вообще.
yopp
Потому что у тебя бизнес-логика в субд утекает
yarastqt [msk +1 week]
Возможно) я только постигаю бэкэнд, в будущем постараюсь такого не делать
Denis
Потому что у тебя бизнес-логика в субд утекает
В 2017 так никто не делает, ага, а вообще это нормальная практика раньше была. Сейчас все с dal работают. Собственно по рассказам тех кто ещё так работал — ничего плохого в этом нет
Cap
А для каких таких кейсов вы используете монго? Я использую для игрового сервера, пошаговой сессионной мобильной игры. В целом удобно что json.
Denis
MEAN стек
Alexey
всем привет Подскажите, если я при баллансировке получаю вот такое: Migration Results for the last 24 hours: 394 : Success 838 : Failed with error 'aborted' что бы это могло значить? Почему failed? Куда покопать?
Denis
Это никогда не было нормальной практикой. :)
Ну почитай про BLL в таком случае
yopp
Ну почитай про BLL в таком случае
ты мне ещё про OLE предложи почитать, ага
yopp
вместо того чтоб за аббревиатурами прятаться, ты мне расскажи когда хранение логики в СУБД оправдано.
yopp
и почему в этом случае положительные эффекты перевесят все минусы такого подхода
Denis
>раньше было нормальной практикой >когда плюсы перевесят минусы Я изначально не говорил что это лучше чем то что сейчас, а плюсы перевесят минусы возможно когда нужно будет мигрировать с технологии на технологию, а дб везти за собой. Только это приходит в голову
Denis
И то ¯\_(ツ)_/¯
Denis
Смотря какой проект
yopp
официальный докерфайл для монги это феерия сладострастия просто
CC-BY-SA-4.0/Docker-ce30.0
Почему?
yopp
https://github.com/docker-library/mongo/blob/master/3.4/docker-entrypoint.sh
Aleksey
врятли в 200 строчек можно сделать что то хорошее
yopp
я пропустил момент когда они туда бустрапинг юзеров добвали
yopp
потому что это подстава прямо пиздец. в месте с keyFile включается аутентификация. а я не мог понять почему у меня кластер никак между собой авторизироваться начать не может
yopp
плюс подстава: rs.initialize почему-то без аутентификации работает
yopp
убил бы
Denis
а как я понимаю defaults в схеме можно только синхронно выставить? Просто мне нужно выставлять дефолтное значение полю при создании субдокумента и я вот думаю, сделать ли defaults синхронной функцией, перед ней вызывать асинхронную, кешировать значение, и следующим действием создавать документ(выглядит как немного хуевый дизайн потому что код расбросан будет) или делать это всё в 2 квери не юзая defaults вообще, будет читабельнее, но это 2 запроса к бд, а не 1
Denis
что на самом деле в моём случае в принципе приемлемо, нет нагрузки и не предвидится
Denis
расбросан лол, разбросан*
yopp
врятли в 200 строчек можно сделать что то хорошее
это, тебе auth в докере как удобнее будет передавать? тупо в uri в ENV, или через какую-то поеботу типа MONGO_DB_PASSWORD и MONGO_DB_PASSWORD_FILE для всяких vault-подобных штук?
Mikhail
как можно запустить монгу с параметрами с помощью pm2?
Mikhail
pm2 start mongod --port 27018 --dbpath data/db --name mongodb так не получается
Mikhail
pm2 start mongod так получается, но нужно с параметрами
yopp
pm2 <cmd> <name> -- <args>
yopp
pm2 start mongod -- --port 27018 --dbpath data/db --name mongodb
Mikhail
Да, уже разобрался, спасибо, однако это несколкьо непредсказуемо, что перед параметром для скрипта нужно писать дополнительно --. В гугле не нашел.
yopp
это стандарт
Mikhail
Окей :)
yopp
вполне себе предсказуемый
Denis
defaults? в монге?
default имел ввиду. Ну т.е когда пишешь field: {type: Date, default: Date.now) Как я понимаю туда можно передавать любую функцию