yopp
А ты можешь сделать find().limit(1) и показать документ в монге?
yopp
Ну или если знаешь _id документа показать его представление в монге
yopp
Там есть прямой доступ btw, можешь поставить себе robomongo и сначала там попробовать.
Avral
yopp
Ааааа
yopp
Вот и ответ на вопрос
Avral
ага, блин что то я сам не додумался посмотреть
Avral
))
Avral
хм
yopp
`posting.key_auths.0: "foobar"`
yopp
Блин. Когда в iOS уже бэктики для кода поправят
Igor
Блин. Когда в iOS уже бэктики для кода поправят
и в макоси (но у меня бета просто)
yopp
В макоси, в нативном клиенте, всё норм
Avral
{"posting.key_auths.0":%20"STM6a4GQKwLokWPz6wJHzC5yEfxcu9dkW1GXhcJCZCfsMmRj8sg9V"} все равно не находит
yopp
Через веб или если в монгу запрос кидать?
yopp
Сдаётся мне что у них веб апи очень плохое
Avral
нет, просто с питона запросы делаю
Avral
Igor
А чё не сразу в монгу?
Igor
или апи/бд не твое? (ну, хотя да, что, в общем-то, логично)
Avral
не мое, мне просто нужно получить моего юзера по ключу и все)
yopp
А что 1 в конце значит?
yopp
Можешь попробовать искать совпадение по значению-массиву [foo, 1]
yopp
Тогда не надо .0 указывать
yopp
Можно ещё дикое `key_auths: {$elemMatch: {$elemMatch: {$eq:<string>}}` попробовать.
yopp
Это семантически ближе к тому что ты хочешь. По одному документу сложно сделать вывод как формируется массив массивов.
yopp
Но если там на каждую запись по массиву, то с .0 семантически не очень верно.
yopp
db.getCollection('Accounts').find({ "posting.key_auths": {$elemMatch: { $elemMatch: { $eq: "STM6a4GQKwLokWPz6wJHzC5yEfxcu9dkW1GXhcJCZCfsMmRj8sg9V" }}} })
yopp
это я через робомонгу попробовал
yopp
находит.
yopp
интересная идея блокчейн через монгу высунуть публично :)
Avral
интересная идея блокчейн через монгу высунуть публично :)
Спасибо большое! работает :) Да, есть и sql базы открытые для steemit блокчейна
Nick
@dd_bb подскажи я правильно понял, что для ручного задания разбивки на чанки при шардировании нужно использовать зоны? а именно вручную порабивать на чанки нельзя?
Nick
видимо мне нужен явный сплит
Nick
разобрался, если кому интересно https://docs.mongodb.com/manual/reference/command/split/
John
Народ, как лучше организовать связь many-to-many? Если быть точнее, то нужно миллионы юзеров добавлять в группы и иметь возможность быстро вытаскивать пользователей по группе
John
Если у миллионов документов будет массив с сотнями айди, это норм идея? Или есть варианты получше?
Nick
где-нибудь есть хотя бы общее описание стейджей плана выполнения запросов? сейчас интересует SHARDING_FILTER и в чем разница в FETCH стейдже под ним и над ним в плане?
Nick
просто не могу понять где этот этап выполняется: на шарде, на монгосе, в драйвере?
yopp
Какую проблему ты пытаешься решить?
yopp
В драйвере в любом случае никаких шагов не выполняется, кроме как сделать bson и по wire protocol отправить его на сервер
yopp
В монгосе происходит только роутинг и мерж результатов
Nick
вообще задача в выборе индексов при шардировании. есть у меня шард ключ, и составной индекс где он является первым полем, всего три поля. Все при выборке по целому индексу все ок, но при попытке выбрать по второму и третьему - я попадаю на COLLSCAN. вот собственно приходится городить еще один индекс из этих двух полей. После чего прихожу к отсутствию необходимости в том индексе из трех полей, т.к. уже есть шардированный по первому полю и отдельный по двум полям
Nick
вот и сижу сравниваю планы выполнения
Nick
вот и двух из них было что SHARDING_FILTER и для него как инпут стейдж идет FETCH а в другом случае наоборот и хотелось бы понять какой импакт всего этого ибо стандарный план вообще не дает представления о масштабах пробелмы
yopp
FETCH это «дай мне документ»
yopp
если у тебя не index-only query, то fetch это нормально
yopp
иначе как монга тебе документ вернёт :)
yopp
SHARDING_FILTER это постобработка документов на соотвествие запросу
yopp
так как бывают ситуации когда чанк есть и тут и там
yopp
если мне память не изменяет
yopp
если ты падаешь на collscan то шардинг тут нипричём совершенно
Nick
ну это я подвел к чему я еще один индекс добавлял
yopp
составной индекс сторого префиксный
yopp
т.е. если у тебя индекс {a: 1, b: 2: c: 3}, ты не можешь искать по b или c
Nick
а при шардирвоании уникальынй индекс только с шард префиксом может быть?
yopp
точнее можешь, но тогда тебе надо явно сказать что a тебя волнует мало, но это потребует чтений индекса по всем значениям a, что крайне не эффективно
yopp
(например сказав a: MinKey .. MaxKey)
Nick
и еще один вопрос про _id_ индекс, он мне например не вперся вообще, но при создании шард коллекции он создается, причем если я указываю параметр чтобы его ен создавать, то он всравно создается не на первом шарде и тогда даже миграция перестает работать
Nick
мне от него не избавиться?
yopp
никак
yopp
_id это праймари кей, по нему монга уникально адресует документы
yopp
если его не будет, монга не сможет отличать документы друг от друга
Nick
а свой ей подсунуть можно?
Nick
так
Nick
значит должно быт ьименно поле _id
yopp
ты можешь в _id писать всё что ты хочешь, если это удовлевторяет двум требовниям: значение уникально и не больше 1024 байт
Nick
все догнал
yopp
туда можно и документы воткнуть, но надо понимать что работать это будет только на полное совпадение
Nick
да с этим опыт уже был
yopp
например простой кейс: есть временная серия. в одну еденицу времени не может быть двух значений для одного атрибута
Nick
но не так сильно разбирался в сути
yopp
нам не имеет смысла хранить ObjectId потому что он балласт и у нас и так уже есть уникальная пара атрибутов
yopp
мы можем положить это в _id: {t: 1234, d: 42}
Nick
вот как раз сейчас такой кейс
yopp
но выборки без полного указания _id (типа только по _id.t или _id.d) не будут работать без дополнительных индексов
Nick
но опять же для обращения к полям а не по целому _id нужны будут индекс по типу _id.docId