
Roman
28.02.2017
00:09:29

Aleksandr
28.02.2017
00:10:59

Алексей
28.02.2017
12:18:00
интересно
а ларчик просто открывался. не хватало индекса.

yopp
28.02.2017
12:33:30

Google

Алексей
28.02.2017
12:33:42
случайно

Артур
28.02.2017
14:18:16
Друзья, собрал в одном месте 132 чата для программистов - @Chats_Developers. Пользуйтесь на здоровье.

GNU/Docker
01.03.2017
11:28:18
Что
@dd_bb приди порядок наведи)

Alex
02.03.2017
07:45:04
Приветы
Есть вопрос)
В наличии коллекция справочных данных с 1.6 миллиона записей.
В системе есть пользователи, их не миллионы, но тоже достаточно . Каждый пользователь из справочных данных может выбрать несколько "любимых".
Надо организовать поиск справочных данных так, чтобы каждый пользователь видел сначала свои "любимые" справочные данные, а потом все остальные.
Навскидку есть пара решений, но все они выглядят весьма корявыми
Поиск - по текстовому полю + гео-поиск с geoJSON

Peter
08.03.2017
08:31:27
Peter Shved:
как в mongodb проверить есть ли значение в массиве
пример:
{
_id : 1,
list : [{ num: [4,6] }, { num: [3,8] }, { num: [6,1] }]
}
делал
$filter: {
input: '$list',
as : 'item',
cond : {
$eq: ['$$item.num', 3]
}
}
не работает -_-

Sergey
08.03.2017
08:44:37
Я просто проверял существование нулевого элемента
Или речь про вхождение элемента, а не пустой массив?
Тогда $in просто

Google

yopp
09.03.2017
13:42:15
https://github.com/torodb/torodb
Интересненько

Sergey
09.03.2017
16:22:03

Nick
10.03.2017
13:53:59
делаю эксплейн агрегацию по дням:
db.docs.explain().aggregate({
$group:{
_id:{
year:"$value.meta.year",
month:"$value.meta.month",
day:"$value.meta.day"
},
totalCount:{$sum:1}
}
})
причем есть индекс
{
"value.meta.year" : 1,
"value.meta.month" : 1,
"value.meta.day" : 1
}
однако план не использует индекс:
{
"stages" : [
{
"$cursor" : {
"query" : {},
"fields" : {
"value.meta.day" : 1,
"value.meta.month" : 1,
"value.meta.year" : 1,
"_id" : 0
},
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "mydb.docs",
"indexFilterSet" : false,
"parsedQuery" : {},
"winningPlan" : {
"stage" : "COLLSCAN",
"direction" : "forward"
},
"rejectedPlans" : []
}
}
},
{
"$group" : {
"_id" : {
"year" : "$value.meta.year",
"month" : "$value.meta.month",
"day" : "$value.meta.day"
},
"totalCount" : {
"$sum" : {
"$const" : 1.0
}
}
}
}
],
"ok" : 1.0
}
почему не используется индекс?

yopp
10.03.2017
13:54:24
ещё один
выстрели в лицо тому, кто предложил тебе такой _id

Nick
10.03.2017
13:55:21
какая разница если я по нему агрегировать должен?

yopp
10.03.2017
13:56:17
1) у _id лимит на 1024 байта
2) индекс на весь _id работате только для ПОЛНОГО ТОЧНОГО СОВПАДЕНИЯ
как и для любого индекса по целиком вложенного документа
такой _id — грубейшая ошибка проектирования
я ещё уверен что там кроме year/month/date ещё поля есть

Nick
10.03.2017
13:58:09
само собой есть, это же документ. _id у доков монговский
мне же надо агрегацию сделать по данным а не по ключу

yopp
10.03.2017
13:58:30
так, кажется я ебусь в глаза
да, ебусь. окей!

ptchol
10.03.2017
13:58:44
согласен

yopp
10.03.2017
13:58:56
сорян ;)

Nick
10.03.2017
13:59:03
там идет зпрос, индекс, эксплейн план. если вдруг непонятно

yopp
10.03.2017
13:59:10
я не туда посмотрел

Google

yopp
10.03.2017
13:59:44

Nick
10.03.2017
14:00:10
ну типа же есть покрывающий индекс, в котором ест ьвсе данные

yopp
10.03.2017
14:00:33
ммм

Nick
10.03.2017
14:00:41
уже не в первый раз сталкиваюсь и мне не ясна логика монги как она строит планы

yopp
10.03.2017
14:01:07
1) у тебя там вложенный документ. запросы по вложенным документам не могут быть index-only by design
монге один фиг надо пойти в сторадж и достать весь документ
(по крайней мере до 3.4 так было, в 3.4 не смотрел ещё, но скорее всего ничего не изменилось)

Nick
10.03.2017
14:02:38
т.е. для нормального использования покрывающего индекса в агрегации мне надо вытащить нужные мне поля на самы верхний уровень дока?
или все еще хуже и только match и sort могут юзать индексы?

yopp
10.03.2017
14:04:59
только $match
afaik sort в AF никак вообще индексы не умеет
но опять-же, данные немного устаревшие, может уже поправили. они в 3.4 нормально там всего починили

Nick
10.03.2017
14:05:35
печаль

yopp
10.03.2017
14:05:55
более того, планировщик не все оптимизации может к AF применить

Nick
10.03.2017
14:05:55
хотя бы понял в чем дело, дальше уже поищу сам

yopp
10.03.2017
14:06:02
в доке всё есть, начни с неё

Dmitry
10.03.2017
14:10:39
а что монга так плоха?

Stefan
10.03.2017
14:11:15

Dmitry
10.03.2017
14:11:35

Google

Dmitry
10.03.2017
14:12:09
наверное да, таки не понял :)

Nikolay
11.03.2017
16:06:22
Это нормально, что я не могу за несколько часов локально поднять службу mongod? Сначала один код ошибки - гуглишь, решаешшь. Затем второй - гуглишь, решаешь. И так пару раз, пока круг не замыкается...

Алексей
11.03.2017
16:07:17
Службу? Виндовс чтоли?

Nikolay
11.03.2017
16:07:50
service. Нет, убунту 16.04

Алексей
11.03.2017
16:08:27
Ставится с пакетов на раз

Alex
11.03.2017
16:08:32
ну это же не постгрес, где всё просто и логично =)

Nikolay
11.03.2017
16:09:28
ну, по мануалам оно так и выглядит, что ставится за раз. Но проверяешь статус - лежит

Sergey
11.03.2017
16:10:25

GNU/Docker
11.03.2017
16:12:04
Вангую банальное неумение читать.

Nikolay
11.03.2017
16:14:18
Не могу инициализировать replica set. Добавил в mongod.conf вот это: replication:
replSetName: "001-rs".
Сейчас выдает вообще 14 ошибку.
А вообще я пытаюсь поднять rocket chat
рили

GNU/Docker
11.03.2017
16:19:31
А разве не пишется что-то кроме кода ошибки? Это же не венда.

Stefan
11.03.2017
16:41:56
Запускаю сам через mongod с параметрами.
У меня все серверы на Debian, так что есть вероятность, что с сервисом из пакетов в Ubuntu тоже что-то не так.