Nick
шардовый индекс это про другое
Nick
он с запросами свзяан косвенно
Nick
если надо делаете обычные индексы которые вам нужны дя запросов без всяких хешей
Nick
или вы хотите чтобы шард выбирался на основе даты7
Artem
но если использовать ObjectId и указывать по диапазону то в некотором случае это будет выборка по дате +-
Nick
не используйте oid в качестве информации о дате/времени, оно не для этого
yopp
он с запросами свзяан косвенно
он прямо связан с запросами
Nick
исключительно определить надо ли слать на все или только на одну?
Nick
помоему это косвенно
yopp
как и любой другой индекс его задача локализовать данные эффективно
yopp
если шард ключ не позволяет эффективно установить куда идти за данными, с таким ключом могут быть проблемы
Nick
т.е. всегда когда в запросе отствуют критери для этого шард ключа и от этого не избавиться, если только задача не для круд -ов где всегда указывается ид
Nick
поэтому лучше считать его как стоящего в сторонке и в особо везучих случаях он будет помогать
yopp
шард ключ надо выбирать как _основной_ инструмент доступа к данным
yopp
и понимать что будут случаи когда невозможно локализовать данные и держать их под контролем
yopp
второй момент: шард ключ должен очень хорошо, а в идеале близко к бесконечности, дробиться
Artem
А если использовать в запросе ключ шардирование то сразу адресация запроса на нужную шарду должна ити как мне кажеться. А если нет то по идее сначало должно найти методом перебора на какой шарде данные лежат
yopp
будет широковещательный запрос ко всем нодам в шарде
DErek
Добрый день. Помогите, пожалуйста. Была не корректно завершена работа с монгой (вылючился ПК). часть данных пропало, в коллекции было около 70М записаей, стало 18М. бекапов нет, возможно ли востоновить данные ? ЗЫ: пробовал mongod --repair, результата не было. Благодарю.
yopp
Если у вас wiredTiger, то можно попробовать через утилиту wt посмотреть что в kv хранилищах осталось
DErek
Если с ключом repair результата нет, то скорее всего штатными средствами не возможно. Выключите монгу и сделайте копию dbPath
я так понимаю что объем данных на диске остался, но как к ним достучаться не знаю.
yopp
Прежде всего — сделать копию. А ещё надежнее — несколько копий, например архив куда-то в облако
yopp
Если repair не помогает, то значит до данных штатными средствами скоре всего «не достучаться». После того как вы сделаете резервные копии, можно попробовать руками сделать repairDatabase с вашей коллекцией. Если не поможет, то compact, но это очень маловероятно что поможет.
yopp
Посмотрите что в логах в момент запуска после отказа
yopp
Логи тоже сохраните
DErek
благодарю, попробую
Semyon V
Опрос массива при помощи $in медленнее опроса объекта при помощи $exists?
Artem
такой вопрос я делаю текстовый поиск по массиву $text: { $search: "привет", $diacriticSensitive: true } в документе и хочу знать с каким элементом массива у меня было совпадение, можно ли это както узнать
Artem
?
yopp
Опрос массива при помощи $in медленнее опроса объекта при помощи $exists?
в bson массивы от документов отличаются только идентификатором типа и тем, что ключом у массива является строка содержащая индекс элемента. в среднем разницы между ними нет, $in это синтаксический сахар над { $or: [ { field: {$eq: in1 }, field: {$eq: in2 }, … field: {$eq: inX}] } $exists это оператор проверки наличия ключа эти два оператора некорректно сравнивать, так как они оперируют разными составляющими. скорее всего запрос с $in по полю с индексом будет эффективнее, чем $exists
Артём
Как можно переименовать поле в коллекции?
Nick
Как можно переименовать поле в коллекции?
https://docs.mongodb.com/manual/reference/operator/update/rename/
Артём
Спасибо
Артём
А удалить как можно поле?
Nick
$unset
Артём
.update({}, { $unset: { tarif: "" } }) Пытаюсь так, 0 изменений
Евгений
Всем привет)
Евгений
Делаем проект на монге Вижу что у мозги лицензия agpl Не могу понять платить надо за монгу если коммерческий прект?
Евгений
Клиент почитал лицензию и в растерянных чувствах
Ivan
возможно, следует платить, если вы предоставляете монгу как сервис
Ivan
но это не точно
yopp
если не поставляется, платить не надо
yopp
если поставляется, то всё сложно, вероятно надо будет платить
yopp
если монга server side, и вы не продаёте монгу как монгу, то платить не надо.
Евгений
У нас клиенты будут покупать подписку в вэбе
Евгений
Монга + реакт на клиенте Ничего на компьютер они не ставят
yopp
если вы делаете SaaS продукт, который не является хостингом монги, то монга клиенту не поставляется в составе продукта и лицензия позволяет использовать вам community редакцию бесплатно
yopp
смотреть надо бинарник монги
yopp
(и в некоторых случаях исходный код)
yopp
нет бинарника или исходного кода в составе продукта — нет проблем
Евгений
Спасибо)
Artem
@gormartsen, спасибо я так и поступил
Artem
думаю сойдет
Gor
сам $text: {$search} запросы будут ок, пока мало данных. если данным планируется очень много - могут быть проблемы с скоростью
yopp
понятно, в москву на митап звать бессмысленно :)
Gor
точно. + мне стремно в РФ ехать)
Gor
скорее всего в NY в июне таки поеду на https://www.mongodb.com/world
Serhii
const result = await User.findOne( { _id: id, ‘field.array.$._id’: orderId } ); обьясните полжалуйста как работает оператор $, нужно найти пользователей у которых внутри в массиве обьектов, поле у обьекта совпадает с айдишником который я передаю, если что то я знаю что можно за два запроса это сделать гораздо легче, но интересно как это можно сделать таким вот способом
Nick
field.array._id: orderId
Nick
вам не нужен $
Nick
он будет нужен если вы решите апдейтить данные в массиве
Serhii
@yatoba 'courier.orders.0._id': orderId, как вместо 0, подставить х?
Serhii
@yatoba мне нужно апдейтить, я прост опример скинул, я планирую делать { $set: { field.array.$(один из элементов).ключ: value }}
Nick
обновление и досточно разные вещи
Nick
$elemMatch
Serhii
@yatoba thx
Serhii
В vscode есть расширение для подсветки методов mongoDB?
Bro
Что за методы монгодб?
Gor
а индексы ставил перед тестами?
Gor
ну и тест проводил по каким параметрам, какой поиск делал. по какому обьему данных
Gor
а до конца долистал там где вот это
Gor