yopp
не помню, надо в доке посмотреть
yopp
не, по массивам можно несколько индексов
yopp
какая разница-то
yopp
даже если там три массива подряд. ну будет очень много ключей
Gor
Но пока до компа не доберусь - не проверю
yopp
cannot index parallel arrays [a2] [a1]
yopp
welp
yopp
внутри компаунда нельзя, да
Gor
Ага, + там ещё пересечения на near, text и ещё какой-то
Gor
и там дальше wt -h /dbPath/ dump <entity_name>
вот что там <\03coffe\00*\ff\80l\80\d9\01\b2\04\04@&8\da \02 <\03design\00*\ff\80l\80\d9\01\b2\04\04@&8\da \02 <\03everyth\00*\ff\80l\80\d9\01\b2\04\04@&8\da \02 <\03locat\00*\ff\80\94\f2\09O \94\04:\b99
yopp
выглядит как обычный multikey индекс
yopp
там есть ключик чтоб как hex дамп сделать
Gor
ага. щя еше шапку хочу сравнить с collection
Gor
app_metadata=(formatVersion=8,
Gor
вот так интереснее:
Gor
"data" : [ { "key0" : "\u003C\u0000\u002A\u00FF\u0080\u005F\u0041\u007D\u0005\u00F4\u0018\u0004\u0030\u00BD\u0091", "value0" : "\u0002" }, { "key0" : "\u003C\u0000\u002A\u00FF\u0080\u0078\u0078\u0078\u0078\u0078\u0078\u0004\u0040\u0085\u0087\u006A", "value0" : "\u0002" },
Gor
вообщем да, выглядит как _id индекс кстати
Gor
многовато.. короче btree
Gor
но значение всегда "value0" : "\u0002"
yopp
нагляднее с -x
yopp
вообщем да, выглядит как _id индекс кстати
нет, _id уникальный индекс, там в value будет ключ по которому документ в основном хранилище записан
yopp
многовато.. короче btree
странный вывод ;)
Gor
странный вывод ;)
Не, я там вставил header сообщение, потом его потёр. Там собственно самое важное что btree
Gor
нет, _id уникальный индекс, там в value будет ключ по которому документ в основном хранилище записан
Да, согласен. Тут нет, но формат 8 версии тоже, и структура данных такая же
Gor
Но тут получается что ключ составной и содержит в себе ссылку на документ походу
yopp
storage id это ключ по которому документ лежит в основном хранилище
yopp
в остальном, как там ключа хранятся вообще не важно. хоть lsm, хоть btree, хоть какойнибудь упорторый фрактальный индекс
yopp
топология очень мало влияет на чтение
Gor
Блин прикольная задачка
yopp
по ней не один вайтпейпер написан)
yopp
всякие гуглы с амазонами используют подход с двойным индексом
yopp
у них _очень_ много токенов, по этому они хранят их отдельно
Gor
А потом вместо токену используют индекс токена?
yopp
да
yopp
со всякими variable length integers
Gor
А так как он стандартной длины, поиск по индексу может быть более быстрым
yopp
нет
yopp
на хранение идентификаторов надо меньше бит
yopp
меньше бит -> меньше сравнивать
Gor
Хотя ... какая разница если есть separator, главное что б индекс был отсортирован и тогда можно нормальные сортировочные поисковые алгоритмы использовать
yopp
более того, чтоб бит было ещё меньше они и используют variable length кодирование
yopp
я какой-то из вайтпейперов про varint читал, там аккурат было про проблемы связанные с такими кодировками и как найти баланс между алгоритмической сложностью и размером индекса
Gor
Это интересно. Я малого уложу на дневной сон, буду пробовать прототип добить на основе and что б теоретически проверить как оно будет работать на and фильтре
yopp
плохо
Gor
А потом можно попробовать всю обвязку делать
Gor
плохо
Ну я о вставке stage_andsort перед stage_fetch который дергает stage_text_match
yopp
я обычно против усложенния стека, но это тот случай когда специализированное хранилище будет дешевле и эффективнее
Gor
Чисто проверить на сколько можно отфильтровать данные
Gor
Единственное но, надо то фильтровать не индекс а значение которое из postfix тянуть надо
Gor
я обычно против усложенния стека, но это тот случай когда специализированное хранилище будет дешевле и эффективнее
У меня интересный срез, обычно поисковые full text search движки используют на выборку max-match NNN
Gor
В моем случае нужна выборка all matched
Gor
И так постоянно
Gor
Потому есть ещё и другие ключи уменьшения выборки - в основном geo bounds box
Nick
Ну я о вставке stage_andsort перед stage_fetch который дергает stage_text_match
Это вы в сырцах ковыряетесь и чтото там меняете для поиграться?
Bro
Эластик юзайте для текстовых индексов лучше
Gor
Но все зависит от задачи
Bro
я пытался текстиндекс юзать но он очень базовый в монге. в итоге в эластик данные подгружал параллельно с записью в монгу
Gor
я пытался текстиндекс юзать но он очень базовый в монге. в итоге в эластик данные подгружал параллельно с записью в монгу
Это да, он базовый вот и колупаю на предмет а что можно сделать и можно ли что то сделать минимум конкретно по фраза поиск и выборку с негативными терминами без полного чтения всех документов по совпадению
倫太郎
@dd_bb
yopp
?
倫太郎
Ну бот зашел, спам закинет позже
倫太郎
Или ты подождать хочешь?
yopp
не факт что закинет и не факт что доживёт до утра даже
倫太郎
Ну кароч ты пассивный на счет спама, ок
yopp
я не вижу смысла что-то делать, если можно ничего не делать
倫太郎
Удобная позиция
yopp
борьба со спамом это задача платформы, которая вместо этого пилит криптокоммунизм
Bro
плюсую
Bro
товарищ ботов пилит которые фильтруют
Bro
но иногда все равно прорываются
yopp
от людей не защитищся
yopp
тратить время на превентивное выпиливание нет смысла. из тысячи человек вероятно с десяток «спящих» спамботов
Serhii
Доброй ночи, как после агрегации данных засейвить обьект,c измененными значениями, к примеру я достал документ, каким то образом поменял значения ключей, как потом проапдейтить первоначальный обьект и сохоранить его в базе export const getOrderWithPrerequisites = async (id) => { const order = await OrderModel.aggregate([ { $project: { courierId: true, status: true, assignedCouriers: true, declinedCouriers: true, point: [{ $arrayElemAt: [ "$point", 0 ] }] } }, { $match: { _id: id } }, ]);
Nick
Агрегации это про выборки а не про изменения. Используйте update
Valdis
всем привет. появилась такая проблема. надо использовать монгу на ноде. я обьявил модель таблицы юзера, где есть уникальное поле в виде айдищника. у меня есть еще модель, где есть поле создатель, которая ссылается на айдишник юзера (типа number). как мне правильно сделать select определенных полей с учетом inner join?