Сергей
по части слова
Dmitriy
как в js составить query я хз, но вам надо создать query с regex и передать его в find
Dmitriy
с input вы получаете данные, т.е. некую строку текста, из которой вам надо составить запрос к монге
Сергей
тогда так: https://docs.mongodb.com/manual/reference/operator/query/regex/
вот строка "молчание ягнят" это req.query.search которую я ввел на вебморде в инпут
Dmitriy
если говорить чисто про mongo shell, то запрос выглядил бы так: db.Foremans.find({"name": {$regex: /.*789.*/i}})
Dmitriy
вот строка "молчание ягнят" это req.query.search которую я ввел на вебморде в инпут
вы меня не поняли. вы мне рассказываете про query в контексте http, а я вам про решение вашей задачи в контексте mongodb
Alexey
Привет, коллеги. Вопрос. Можно ли шардировать MongoDB так, чтобы на каждом шарде хранилось 2/3 данных? То есть данные делятся на три равные части: А, B и C. На первом шарде хранятся данные А и В, на втором - В и С, на третьем - А и С. То есть в случае падения одного шарда, все данные, так или иначе, доступны.
Nick
Вернее подключиться к базе
првоерьте доступен ли хост с кластером от вас, может лочиться росмонадзором
Nick
првоерьте доступен ли хост с кластером от вас, может лочиться росмонадзором
и докучи добавьте свой ип в разрешенные для подключения в настрйоках кластера
Сергей
если говорить чисто про mongo shell, то запрос выглядил бы так: db.Foremans.find({"name": {$regex: /.*789.*/i}})
в моей бд хранится данные в массиве с обьектами хотел спросить как отфильтровать по слову в инпуте сразу по трем полям
Dmitriy
через $or) db.Foremans.find({$or: [{"name": {$regex: /.*789.*/i}, {"surname": {$regex: /.*789.*/i}, {"patronymic": {$regex: /.*789.*/i}]})
Сергей
пошел читать про $regex
Dmitriy
в объект оберните весь запрос
Dmitriy
так же как я выше написалъ
Dmitriy
find({$or: [{"name": {$regex: /.*789.*/i}, {"surname": {$regex: /.*789.*/i}, {"patronymic": {$regex: /.*789.*/i}]})
Dmitriy
как называется odm в ноде которой вы пользуетесь? пойду за вас почитаю доку)
Dmitriy
ааа, я понял, вы просто скопипастили мой пример, который я на коленке писал без проверки и в котором ошибся со скобками 😔
Dmitriy
ну тогда копипастите верный вариант: {$or: [{"name": {$regex: /.*789.*/i}}, {"surname": {$regex: /.*789.*/i}}, {"patronymic": {$regex: /.*789.*/i}}]} 😜
Mike
ты замени только /.*789.*/i на свой инпут то
Сергей
Mike
с этим то я разобрался
ты напиши потом, приняли тебя или нет любопытно даже
Сергей
Получилось?)
Да спасибо)) сейчас отрисую полученный
Сергей
ты напиши потом, приняли тебя или нет любопытно даже
да )) обязательно вместе посмеемся))
yopp
Шардирование это механизм масштабирования, а не отказоустойчивости. Отказоустойчивость достигается репликацией. В вашем случае вы скорее всего хотите сбалансировать реплики составляющие конкретный шард таким образом, чтоб в случае отказа или падения линка данные продолжали быть доступны для чтения
yopp
Спасибо
https://docs.mongodb.com/manual/tutorial/sharding-high-availability-writes/ Как пример
Serhii
Ребята, есть коллекция юзеров, у юзера есть favourite locations, по перфомансу лучше будет хранить locations отдельной коллекцией и делать lookup по ним или хранить locations внутри users?
Stripe
Всем привет!
Stripe
подскажите, как мне вытянуть вакансию у которой совпадает имя или тег(тега может и не быть). Содержимое сущности такое { "_id" : ObjectId("5dd3f10f3b95a243013a6649"), "name" : "ABC Test", "category" : ObjectId("5dd3efd03b95a243013a6641"), "subcategory" : null, "contact" : ObjectId("5dd3ef6a8c4315745f11b2c2"), "hotVacancy" : true, "city" : ObjectId("5dd3f0853b95a243013a6645"), "advantage" : ObjectId("5dd3f0468c4315745f11b2c6"), "externalLink" : null, "description" : [ "ABC Test", "ABC Test", "ABC Test" ], "requirements" : [ "ABC Test", "ABC Test" ], "skills" : [ "ABC Test" ], "active" : false, "slug" : "abc-test-minsk", "tags" : [ ObjectId("5dd54a3a84c33d1991528c72") ] }
Stripe
tags опциональный, он может быть, а может и не...
Dmitriy
tags опциональный, он может быть, а может и не...
Добавьте or в запрос) если в случае не быть таг равен null, то ещё exist, если пустом массив, то ne: []
yopp
tags опциональный, он может быть, а может и не...
Не передайте в запрос если его нет
Stripe
У меня ODM.
Dmitriy
А ещё проще разрулите формат запроса на стороне приложения. Данные то оно отправляет
yopp
Нет никакой разницы. Добавьте условие
Dmitriy
У меня ODM.
И что это меняет? Вампросто надо сделать условие, если во входных параметрах есть таг, то добавить условие в запрос)
Stripe
Есть вакансия у которой есть теги, так мне нужно фильтр сделать по названию вакансии и названию тега, если они совпадают, то вернуть их. Но сейчас есть косяк в том, что тегов нету, а имя вакансии совпадает и возвращается 0.
Stripe
foreach (self::FILTER_FIELDS as $field) { $matchField = $field; if ($this->isPropertyNested($field, $resourceClass)) { try { $lookups = $this->addLookupsForNestedProperty( $field, $aggregationBuilder, $resourceClass ); $matchField = $lookups[0]; } catch (MappingException $e) { $matchField = $field; } } $regex = new Regex(preg_quote($value), 'iu'); $expressions[] = $aggregationBuilder ->matchExpr() ->field($matchField) ->in([$regex]); } $matchStage = $aggregationBuilder->match(); foreach ($expressions as $expression) { $matchStage->addOr($expression); }
Nick
немного не понятно, приведите пример такого дока
Nick
сделайте в виде json дока
Anonymous
как мне пройтись по всем значениям поля в коллекции, и если оно не уникальное, то отредактировать его наиболее эффективно (много миллионов записей)
Nick
..... size:{ h: Number, w: Number, uom:String } ....
Nick
чтото в таком стиле
Nick
а блин, вам tags описать надо?
Nick
tags: [String] https://mongoosejs.com/docs/schematypes.html#arrays
Anonymous
как мне пройтись по всем значениям поля в коллекции, и если оно не уникальное, то отредактировать его наиболее эффективно (много миллионов записей)
ап. нету нативного апи для этого никакого? только делать кучу запросов на каждый документ придется?
Dmitriy
ап. нету нативного апи для этого никакого? только делать кучу запросов на каждый документ придется?
а какое апи вы предполагаете, что может быть, если вы описываете какую-то совсем кастомную бизнес логику. имхо описанное вами должно контролироваться при вставке на уровне unique индекса
Anonymous
как мне поможет unique индекс? он кинет ошибку и все
Anonymous
я то не против unique, но не вижу как он мне поможет
Anonymous
вот если можно сделать unique и описать что делать в ситуации когда не unique - вот это да, то что я спрашиваю. есть такое?
Dmitriy
как мне поможет unique индекс? он кинет ошибку и все
он вам кинет ошибку с определенным кодом и индексом на котором произошла ошибка. ваша задача в приложение поймать ошибку с кодом 11000 и распарсить из текста ошибки название индекса (в данном контексте поля), которое надо изменить
Dmitriy
вот вам и решение, которое делается довольно элементарно на уровне приложения
Anonymous
ок, но потом же не смогу продолжить цикл с этго же места
Dmitriy
ок, но потом же не смогу продолжить цикл с этго же места
кто вам мешает это сделать? просто измененный документ ставите в конец очереди (массива если мы про приложение)
Anonymous
хотя надо попробовать. обернуть в трай кетч чтоб не прерывал цикл
Dmitriy
хотя надо попробовать. обернуть в трай кетч чтоб не прерывал цикл
да, само собой, если вы на exception упадете, то вы не выполните свою бизнес задачу логику которой я вам выше описал. ваша задача как раз в catch перехватить ошибку и обработать ее (проверить код и все остальное)
Anonymous
ок, спс
Anonymous
await videos.find().forEach никак асинхронным не сделать?
Anonymous
в цикле forEach не работает await
Dmitriy
тут не подскажу, ноду не знаю. это вам лучше в чате ноды уточнить
Anonymous
это драйвер монги, а не нода
Anonymous
https://docs.mongodb.com/manual/reference/method/cursor.forEach/
Anonymous
это вопрос не о ноде
Anonymous
так-то понятно что JSный forEach не ждет
Anonymous
как мне перебрать асинхронно курсор тогда, ок?
Anonymous
т.е. мне надо ждать завержения функции в курсоре
Anonymous
во тут какой-то ForEachAsync есть https://stackoverflow.com/questions/31947391/mongodb-c-sharp-driver-2-0-and-foreachasync н оя не могу в доке найти
Dmitriy
1) а зачем вам find в той задаче, которую вы описали? 2) у вас все приложение крутится на монге, т.е. вы не имеете отдельного приложения, которое что-то вставляет в базу?
Dmitriy
а, я просто не понял как вы мыслью перескачили)
Anonymous
Это очень устаревшая версия монги
просто гуглил как forEach асинхронно использовать. вроде next() советуют.
Vova
var ar = _myMongoCollection.Find(filter).ToArrayAsync(); foreach (var item in ar) { ... }