
Igor
03.06.2017
10:57:20
так что я бы не ручался, что там вообще такой запрос можно сделать
а 400 возвращается на одинарные кавычки
хочется странного [x]

yopp
03.06.2017
10:58:04
Т.е. Тебе нужно найти документ, в котором поле posting.key_auths является массивом, а тебе нужно чтоб любой из эелементов полностью совпадал с какой-то строкой?

Google

Pavel
03.06.2017
10:58:18
вот я почему и задумался, правильно ли я запрос строю или это просто у них апи падает со сложного запроса

yopp
03.06.2017
10:58:42
Тебе не нужен eq

Igor
03.06.2017
10:58:58
$elemMatch: "STM6a4GQKwLokWPz6wJHzC5yEfxcu9dkW1GXhcJCZCfsMmRj8sg9V"
так ведь будет?
(я просто сам ненастоящий сварщик)

yopp
03.06.2017
10:59:14
Просто posting.key_auths: "foo"

Igor
03.06.2017
10:59:21
круто
а elemmatch для вложенных объектов, получается, скорее?

yopp
03.06.2017
11:00:03
Я же дал ссылку на документацию

Igor
03.06.2017
11:00:08
сорри :(

yopp
03.06.2017
11:00:33
Это частный случай, когда не нужно явно указывать условие совпадения.

Pavel
03.06.2017
11:00:43
{"posting.auth_key":%20"STM6a4GQKwLokWPz6wJHzC5yEfxcu9dkW1GXhcJCZCfsMmRj8sg9V"}

Google

Pavel
03.06.2017
11:00:48
ничего не находит

yopp
03.06.2017
11:01:33
Я в имени аттрибута ошибся
Там не auth_key, а key_auths

Pavel
03.06.2017
11:03:04
{"posting.key_auths":%20"STM6a4GQKwLokWPz6wJHzC5yEfxcu9dkW1GXhcJCZCfsMmRj8sg9V"} не находит

yopp
03.06.2017
11:03:50
А ты можешь сделать find().limit(1) и показать документ в монге?
Ну или если знаешь _id документа показать его представление в монге
Там есть прямой доступ btw, можешь поставить себе robomongo и сначала там попробовать.

Pavel
03.06.2017
11:07:58

yopp
03.06.2017
11:08:15
Ааааа
Вот и ответ на вопрос

Pavel
03.06.2017
11:08:21
ага, блин что то я сам не додумался посмотреть
))
хм

yopp
03.06.2017
11:09:30
`posting.key_auths.0: "foobar"`
Блин. Когда в iOS уже бэктики для кода поправят

Igor
03.06.2017
11:10:13

yopp
03.06.2017
11:10:39
В макоси, в нативном клиенте, всё норм

Pavel
03.06.2017
11:18:05
{"posting.key_auths.0":%20"STM6a4GQKwLokWPz6wJHzC5yEfxcu9dkW1GXhcJCZCfsMmRj8sg9V"} все равно не находит

yopp
03.06.2017
11:19:00
Через веб или если в монгу запрос кидать?
Сдаётся мне что у них веб апи очень плохое

Google

Pavel
03.06.2017
11:26:53
нет, просто с питона запросы делаю

Igor
03.06.2017
11:27:39
А чё не сразу в монгу?
или апи/бд не твое? (ну, хотя да, что, в общем-то, логично)

Pavel
03.06.2017
11:28:19
не мое, мне просто нужно получить моего юзера по ключу и все)

yopp
03.06.2017
11:45:10
А что 1 в конце значит?
Можешь попробовать искать совпадение по значению-массиву [foo, 1]
Тогда не надо .0 указывать
Можно ещё дикое `key_auths: {$elemMatch: {$elemMatch: {$eq:<string>}}` попробовать.
Это семантически ближе к тому что ты хочешь. По одному документу сложно сделать вывод как формируется массив массивов.
Но если там на каждую запись по массиву, то с .0 семантически не очень верно.
db.getCollection('Accounts').find({
"posting.key_auths": {$elemMatch: { $elemMatch: { $eq: "STM6a4GQKwLokWPz6wJHzC5yEfxcu9dkW1GXhcJCZCfsMmRj8sg9V" }}}
})
это я через робомонгу попробовал
находит.
интересная идея блокчейн через монгу высунуть публично :)

Pavel
04.06.2017
01:52:11

Nick
05.06.2017
09:40:21
@dd_bb подскажи я правильно понял, что для ручного задания разбивки на чанки при шардировании нужно использовать зоны? а именно вручную порабивать на чанки нельзя?
видимо мне нужен явный сплит
разобрался, если кому интересно https://docs.mongodb.com/manual/reference/command/split/

yopp
05.06.2017
10:39:14

Google

Фёдор
05.06.2017
10:45:13
Народ, как лучше организовать связь many-to-many? Если быть точнее, то нужно миллионы юзеров добавлять в группы и иметь возможность быстро вытаскивать пользователей по группе
Если у миллионов документов будет массив с сотнями айди, это норм идея? Или есть варианты получше?

yopp
05.06.2017
12:17:20

Nick
05.06.2017
14:10:38
где-нибудь есть хотя бы общее описание стейджей плана выполнения запросов? сейчас интересует SHARDING_FILTER и в чем разница в FETCH стейдже под ним и над ним в плане?
просто не могу понять где этот этап выполняется: на шарде, на монгосе, в драйвере?

yopp
05.06.2017
14:16:51
Какую проблему ты пытаешься решить?
В драйвере в любом случае никаких шагов не выполняется, кроме как сделать bson и по wire protocol отправить его на сервер
В монгосе происходит только роутинг и мерж результатов

Nick
05.06.2017
14:27:05
вообще задача в выборе индексов при шардировании. есть у меня шард ключ, и составной индекс где он является первым полем, всего три поля. Все при выборке по целому индексу все ок, но при попытке выбрать по второму и третьему - я попадаю на COLLSCAN. вот собственно приходится городить еще один индекс из этих двух полей.
После чего прихожу к отсутствию необходимости в том индексе из трех полей, т.к. уже есть шардированный по первому полю и отдельный по двум полям
вот и сижу сравниваю планы выполнения
вот и двух из них было что
SHARDING_FILTER и для него как инпут стейдж идет FETCH
а в другом случае наоборот и хотелось бы понять какой импакт всего этого ибо стандарный план вообще не дает представления о масштабах пробелмы


yopp
05.06.2017
14:30:52
FETCH это «дай мне документ»
если у тебя не index-only query, то fetch это нормально
иначе как монга тебе документ вернёт :)
SHARDING_FILTER это постобработка документов на соотвествие запросу
так как бывают ситуации когда чанк есть и тут и там
если мне память не изменяет
если ты падаешь на collscan то шардинг тут нипричём совершенно

Nick
05.06.2017
14:33:25
ну это я подвел к чему я еще один индекс добавлял

yopp
05.06.2017
14:33:36
составной индекс сторого префиксный

Google

yopp
05.06.2017
14:33:52
т.е. если у тебя индекс {a: 1, b: 2: c: 3}, ты не можешь искать по b или c

Nick
05.06.2017
14:34:12
а при шардирвоании уникальынй индекс только с шард префиксом может быть?

yopp
05.06.2017
14:34:27
точнее можешь, но тогда тебе надо явно сказать что a тебя волнует мало, но это потребует чтений индекса по всем значениям a, что крайне не эффективно
(например сказав a: MinKey .. MaxKey)

Nick
05.06.2017
14:37:12
и еще один вопрос про _id_ индекс, он мне например не вперся вообще, но при создании шард коллекции он создается, причем если я указываю параметр чтобы его ен создавать, то он всравно создается не на первом шарде и тогда даже миграция перестает работать
мне от него не избавиться?

yopp
05.06.2017
14:37:37
никак
_id это праймари кей, по нему монга уникально адресует документы
если его не будет, монга не сможет отличать документы друг от друга

Nick
05.06.2017
14:38:42
а свой ей подсунуть можно?
так
значит должно быт ьименно поле _id

yopp
05.06.2017
14:39:15
ты можешь в _id писать всё что ты хочешь, если это удовлевторяет двум требовниям: значение уникально и не больше 1024 байт

Nick
05.06.2017
14:39:36
все догнал

yopp
05.06.2017
14:39:44
туда можно и документы воткнуть, но надо понимать что работать это будет только на полное совпадение