Anonymous
😂
yopp
Я думаю что вы до понедельника отдохнёте в read-only. А в понедельник, если вы сможете без эмоций отвечать на простые вопросы, мы можем попробовать разобраться что пошло не так.
В текущем формате это не продуктивно
nzjdMFpV
Ребята, подскажите, как использовать
{
_id: {"$gte": {"$oid":'5dcdc0500000000000000000'}}
}
в агрегации в match?
nzjdMFpV
ObjectId() не могу использовать по многим причинам
nzjdMFpV
Нужен именно oid.
Но когда пишу {
_id: {"$gte": ObjectId("5dcdc0500000000000000000")}
}
То все работает
nzjdMFpV
Так, заплачу 500 рублей на карту за ответ, который решит эту проблему
Vova
nzjdMFpV
Кого?
nzjdMFpV
'5dcdc0500000000000000000'?
Vova
+
nzjdMFpV
Нет, не помогло, просто не дает провести агрегацию Field must not begin with '$' or '.', field path was: $oid
Vova
$$oid а если так?
nzjdMFpV
Возможно я задал вопрос с проблемой топора, но мне нужно из текстового запроса сделать агрегацию в монге по базе
nzjdMFpV
nzjdMFpV
И в тексте ObjectId() я указать не могу
Vova
А покажи целиком запрос агрегации
nzjdMFpV
Вопрос решен
Daniil
Строки нужно явно привести к ObjectId в aggregation framework
nzjdMFpV
Ставка анулирована
Vova
Поделись решением
nzjdMFpV
Sviatoslav
Подскажите как искать сразу по всему объекту find({ 'json.en': new RegExp() }}) будет искать только в en а как искать и по en и по ru и по всем остальным вложенным полям?
Sviatoslav
пример с pg SELECT * FROM table WHERE json::text ILIKE '%%'
Sviatoslav
Вообщем хочу что бы объект воспринимался как обычный текст
yopp
Sviatoslav
Никак
звучит обнадеживающе(
yopp
Никакой надежды нет, подобного запроса в монге нет
yopp
В pg вы тоже на деле меняете семантику и используете ::text модификатор
yopp
Но монга не имеет поддержки подобных операций
yopp
Если у вас относительно простая структура, то вы можете поменять схему
yopp
Если у вас локализация, то вместо использования динамических ключей, вы можете использовать статические ключи и массивы
i18n: [{lang: «us», text: «foo»}, … ]
yopp
в таком случае вы сможете делать match по text или lang для всех элементов массива
yopp
В монге использование динамических имён ключей почти всегда является антипатерном, который приводит к огромным проблемам
yopp
в легких случаях, можно попробовать решить вашу задачу через AF и $objectToArray
yopp
но это только в том случае, если у вас есть какое-то другое условие, которое позволит сократить выборку
yopp
иначе вам придётся «размотать» в массив все документы из коллекции, а это очень дорого
Sviatoslav
Делать через or это ведь накладно для поиска? find{ ($or: [{ 'json.en': new RegExp()}, {'json.ru': new RegExp()]}})
yopp
если у вас нет индекса, это в любом случае будет требовать просмотреть все документы в коллекции
yopp
json.en это плохой выбор
yopp
очень плохой
yopp
это заставит вас сделать N индексов по числу уникальных ключей
Sviatoslav
Это не изменяемая таблица индексы поставить не проблема
yopp
это создаст сложности с запросами
yopp
как минимум вот эти батареии $or
Sviatoslav
самый лучший вариант насколько я понял это менять структуру и через match?
yopp
по этому я ещё раз рекомендую изменить схему на json: [{lang: ‘ru’, text: ‘bar’}]
Sviatoslav
или строку а не обьект
Sviatoslav
Вообще мне в этом вопросе главное скорость, строка ведь будет быстрее? в любом случаи нужно по регулярке искать
yopp
«важнее скорость» это недостаточная постановка проблемы
yopp
я не понимаю что вы имеете ввиду под «строка будет быстрее»
Sviatoslav
База городов, ищу город по первым трем буквам нужно не учитывать локализацию
yopp
yopp
и дальше условие по json.text $regex с ^ якорем
yopp
https://docs.mongodb.com/manual/reference/operator/query/regex/#index-use
Sviatoslav
Понял, спс. Придется менять. Пока что одни сплошные расстройства) По geoJson тоже нельзя искать когда lat lon в разных полях?
Sviatoslav
или можно как то обьединить?
yopp
У вас в постгресе было бы не меньшее расстройство, так как ваш запрос и там, скорее всего бы не использовал индекса
Sviatoslav
Это все кешируется. Потому и не так важно
yopp
Это не очень согласуется с «главное скорость» ;)
yopp
про геозапросы, расскажите подробнее
Sviatoslav
согласен) ну вот хочу я найти всех людей которые находятся возле данных координат в радиусе 10км если б у меня было поле geojson [lat, lon] я бы это мог сделать без проблем. Но у меня два отдельных поля под lat и под lon
yopp
Нет, монга не поддерживает такую схему. Или некоторые geoJSON типы, или устаревшая пара-массив [x,y]
yopp
geoJSON это наиболее корректный выход из ситуации
Sviatoslav
pg меня разбаловал)
yopp
Я вам рекомендую не пытаться проецировать свой опыт с табличными хранилищами, на документные
yopp
И в принципе, разные модели требуют разных подходов и эти подходы имеют между собой мало общего
Noname
message:
'No matching document found for id version
name: 'VersionError',
version: 6,
modifiedPaths:
node.js + mongoose
В чем может быть загвоздка?
Noname
и как бороться?
Noname
yopp
AF и $filer или $reduce
yopp
Aggregation Framework
https://docs.mongodb.com/manual/reference/operator/aggregation/filter/#example
Oleg
Привет, подскажите у монги имя пользователя в uri подключения - case sensitive?
yopp
yopp
foo и Foo — разные пользователи
yopp
не только в uri, это на уровне механизма аутентификации
Oleg
окей. 😐
Artem
такой вопрос, есть поле array bsonType -> string, и нужно что бы размер поля к примеру не привышал 100 строк, одним запросом добавлять строку в конец масива а если длина массива привышает 100 строк то удалять строку с начала массива
Artem
Как можно такое провернуть