yopp
network-online.target
Andrey
yopp
но конфигурация через ip это в любом случае плохая идея
yopp
если нет своего днса, то локальные резолверы на нодах настроить чтоб хосты везде резолвились в нужные ip
Andrey
но конфигурация через ip это в любом случае плохая идея
я не стану приператься, потому что просил помощи. видимо нужно чуть больше освоить этот момент. естественно перенастрою его на имена. Спасибо боьшое @dd_bb за помощь! до такого я врядли бы допер мозгом. сейчас перенастрою и немного покошмарю результат
Bandikoot
Andrey
но скрывать не стану - затык на имена при наличии статики вызывает у меня вопросы
yopp
ip адрес это плохой идентификатор ноды в реплике, потому что у физической машины может быть множество адресов. а вот хостнейм — один
yopp
вероятно вашу проблему можно решить через network-online.target + bindIp: <static>
yopp
но потом у вас поменятся адрес и вам надо будет делать лишние телодвижения чтоб снова добавить ноду в реплику
yopp
Анатолий
yopp
монга под кеш документов выделит cacheSizeGB, плюс ещё неизвестное количество под различные свои нужны, типа сортировок соединений и всего такого
yopp
кеш файловой системы монгой никак не управляется, им ОС распоряжается. ваша проблема скорее всего связана с overcommit_memory
yopp
и это к редису
yopp
если оно на форке вылетает
yopp
если в редисе ничего не поменялось, то там CoW и при форке новый процесс на деле не будет требовать ещё столько-же памяти, сколько родитель. но если у вас 128G, из которых 80G занято монгой и ещё 40G занято редисом, ось может не дать форку выделить ещё 40G, потому что памяти может и не хватить. Хотя на деле ему 40G и не надо и эвристика ошибается. overcommit_memory в 1 решает проблему.
yopp
https://redis.io/topics/faq#background-saving-fails-with-a-fork-error-under-linux-even-if-i-have-a-lot-of-free-ram
yopp
но иметь несколько хранилищ на одном хосте — плохая идея
Artemy
Подскажите, как решить следующую задачу:
Получаю на входе массив ингредиентов следующего вида: ['onion', 'bread', 'potato']
И есть рецепты примерно такого вида:
{
title: "Title",
ingredients: [
{
name: "bread"
quantity: 2
},
{
name: "potato",
quantity: 4
}
]
}
Как правильно сформировать запрос, чтобы получать выборку рецептов, которые содержат все ингредиенты из массива ингредиентов, но при этом не обращать внимание на их необходимое количество?
Вероятно, нужно как-то использовать оператор $all, но не совсем понимаю, как массив строк сравнивать с массивом объектов?
Artemy
Ну я увидел, что кто-то только что отправил сообщение с $in
Мне нужно, чтобы запрос матчил только те рецепты, которые содержат ВСЕ ингредиенты из массива, поэтому $in не подходит, насколько я понимаю
Bandikoot
Artemy
А можешь отправить ещё раз с учётом этого условия?
Artemy
Или нужен другой подход в таком случае?
Анатолий
Подскажите, как решить следующую задачу:
Получаю на входе массив ингредиентов следующего вида: ['onion', 'bread', 'potato']
И есть рецепты примерно такого вида:
{
title: "Title",
ingredients: [
{
name: "bread"
quantity: 2
},
{
name: "potato",
quantity: 4
}
]
}
Как правильно сформировать запрос, чтобы получать выборку рецептов, которые содержат все ингредиенты из массива ингредиентов, но при этом не обращать внимание на их необходимое количество?
Вероятно, нужно как-то использовать оператор $all, но не совсем понимаю, как массив строк сравнивать с массивом объектов?
ты уверен что используешь правильную БД для своей задачи?
Artemy
Анатолий
реляционные БД в таком сценарии обычно юзают..
Анатолий
mysql, postgresql, mssql, oracle
Artemy
А посредством монги эту задачу невозможно решить?
Bandikoot
есть идея безумного костыля: генерить запрос динамически, вставляя условия на каждый элемент исходного массива
Анатолий
когда инструмент не тот - всегда начиняются костыли
Bandikoot
но вообще правильным было бы двигаться куда-то в сторону сравнения множеств
Artemy
Анатолий
ты можешь почесать ухо пёрышком зажатом в пальцах роботической руки запущенной подпрограммой с условными координатами комнаты, сканером с определением движущихся тел посредством видеонаблюдения и экстраполяции местоположения уха в пространстве относительно роборуки... а можешь просто почесать рукой
Nick
Подскажите, как решить следующую задачу:
Получаю на входе массив ингредиентов следующего вида: ['onion', 'bread', 'potato']
И есть рецепты примерно такого вида:
{
title: "Title",
ingredients: [
{
name: "bread"
quantity: 2
},
{
name: "potato",
quantity: 4
}
]
}
Как правильно сформировать запрос, чтобы получать выборку рецептов, которые содержат все ингредиенты из массива ингредиентов, но при этом не обращать внимание на их необходимое количество?
Вероятно, нужно как-то использовать оператор $all, но не совсем понимаю, как массив строк сравнивать с массивом объектов?
делаете условие $and:[
$elemMatch:{ ingredients.name: v1},
$elemMatch:{ ingredients.name: v2},
.....
]
Nick
Подскажите, как решить следующую задачу:
Получаю на входе массив ингредиентов следующего вида: ['onion', 'bread', 'potato']
И есть рецепты примерно такого вида:
{
title: "Title",
ingredients: [
{
name: "bread"
quantity: 2
},
{
name: "potato",
quantity: 4
}
]
}
Как правильно сформировать запрос, чтобы получать выборку рецептов, которые содержат все ингредиенты из массива ингредиентов, но при этом не обращать внимание на их необходимое количество?
Вероятно, нужно как-то использовать оператор $all, но не совсем понимаю, как массив строк сравнивать с массивом объектов?
тут есть еще пример через $all и $elemMatch
https://docs.mongodb.com/manual/reference/operator/query/all/
yopp
Подскажите, как решить следующую задачу:
Получаю на входе массив ингредиентов следующего вида: ['onion', 'bread', 'potato']
И есть рецепты примерно такого вида:
{
title: "Title",
ingredients: [
{
name: "bread"
quantity: 2
},
{
name: "potato",
quantity: 4
}
]
}
Как правильно сформировать запрос, чтобы получать выборку рецептов, которые содержат все ингредиенты из массива ингредиентов, но при этом не обращать внимание на их необходимое количество?
Вероятно, нужно как-то использовать оператор $all, но не совсем понимаю, как массив строк сравнивать с массивом объектов?
сравнивать через dot notation: {"ingredients.name": {$all: ["bread", "tomatoe»]}
yopp
yopp
по ingredients.name сделать индекс
Artemy
Но я посмотрю, спасибо
Artemy
yopp
$elemMatch в вашем случае смысла не имеет
Dmitry
Случайно закрыл терминал в VSCode (с него был запущен mongod), теперь при написании команды mongod пишет Failed to set up listener: SocketException: Address already in use
Dmitry
Как остановить теперь сервер локальный? (ctrl-c соответсвенно не работает)
yopp
Dmitry
Заработало, спасибо!
Ivan
Не подскажете - можно как-то просто узнать количество полей в документе?
s0menickname
Ivan
ну мне хочется именно средствами монги, чтобы в монго-шеле найти те документы, у которых одно поле - объект, и в этом объекте больше 1 поля
yopp
а сколько документов?
yopp
«объект» это поддокумент?
Bandikoot
проверка на объект через $type
https://docs.mongodb.com/manual/reference/operator/query/type/
а для кол-ва полей в нём можно попробовать $where
https://docs.mongodb.com/manual/reference/operator/query/where/
Ivan
документов пара миллионов
yopp
но в целом $objecToArray и $group по $type
yopp
если название аттрибута не известно
yopp
но дважды разворачивать будет дорого
Bandikoot
Ivan
Сделал вот так:
db.getCollection('collection').find({"$and":[
{"myObject":{"$ne":{}}},
{"$where":function() {
return Object.keys(this.myObject).length > 1
}
}
]})
Bandikoot
yopp
yopp
$ne: {} это вообще так себе условие
Nick
Ivan
разовая
Ivan
там почти два миллиона документов с пустым этим объектом - для этого фильтрую через ne пустой
Ivan
и несколько десятков тысяч с непустым
Nick
берите что выше либо первое в гугле что выдало и в путь
Nick
и смысла паритсья вообще это делать монгой нет
Ivan
ну я выше уже написал как у меня в итоге заработало
Nick
ну да заработало, только индексы не работают, на монге выполняется тот же код, что и на js клиенте можно было сделать
Ivan
то есть достать на уровень приложения всю коллекцию и по ней проитерироваться?
Ivan
да, я уже сделал - дальнейшие обсуждение мне тут для общего развития нужно
Ivan
задачи "слазить монгошелом и что-то достать/посчитать" у меня достаточно часто возникают, а с монгой я только начал работать
yopp
монгошелл плохой инструмент для этого
Bandikoot