
Andrey
19.10.2018
14:42:54
А чем монго4 принципиально лучше монго3?

yopp
19.10.2018
14:43:56
тем что она уже есть. смысла на 3 переходить уже нет
Stable: 4.0.3 (Oct 9, 2018) Bugfix: 3.6.8 (Sep 19, 2018), Legacy: 3.4.17 (Sep 7, 2018)
MongoDB quick overview/production notes: https://www.percona.com/live/e17/sites/default/files/slides/Running%20MongoDB%20in%20Production%20-%20FileId%20-%20115299.pdf
4.0.3: https://docs.mongodb.com/manual/release-notes/4.0/#oct-9-2018
3.6.8: https://docs.mongodb.com/manual/release-notes/3.6/#sep-19-2018
3.4.17: https://docs.mongodb.com/manual/release-notes/3.4/#sep-7-2018
End of life: 3.4 (EOL: June 2019), 3.2.21 (REL: Sep 2018 / EOL: Sep 2018), 3.0.15 (REL: May 2015 / EOL: Feb 2018)
В следующем году прощаемся с 3.4

Google

Alexander
19.10.2018
14:47:43
ееее

Aga
19.10.2018
16:26:37
Эх)

AstraSerg
19.10.2018
16:33:21

yopp
19.10.2018
16:42:25
https://docs.mongodb.com/manual/core/index-intersection/

Maxim
19.10.2018
17:31:09
нет, не правильно
спасибо за ссылку - обычно везде говорят что она под капотом один индекс юзает
@dd_bb подскажите пожалуйста насколько адекватный подход: на каждую обёемную агрегацию (джойны, проджекты и прочее ) делать отдельную вьшку в базе и дальше уже работать с ней. Как ведут вообще себя индексы в агригейшен фремворке, в частности при лукапе?

yopp
19.10.2018
17:33:35
главное чтоб вы улыбались

Maxim
19.10.2018
17:33:41
+ нормально ли это для монги делать несколько жирных составных индексов, по которых можно делать кверы не дёргая при этом всю коллекцию, а только индексы?

yopp
19.10.2018
17:33:43
всё остальное проверятется в бою
если данные уже есть, то берём и на тестовом столе проверяем все свои гипотезы

Google

yopp
19.10.2018
17:34:24
если данных нет, то пишием скрипт который нагрегерирует несколько гигабайт данных и проверяем на них
мне кажется что views это плохая идея

Maxim
19.10.2018
17:34:45

yopp
19.10.2018
17:34:47
лукапы в продакшене тоже
но я старовер

Maxim
19.10.2018
17:36:02
как правильно?
если мне нужно делать фильры и сортировку по двух коллекция сразу?

yopp
19.10.2018
17:37:32
нет «правильно», есть «эффективно»
сортировка по двум коллекциям это всё

Maxim
19.10.2018
17:38:03
о, а какой путь верный?

yopp
19.10.2018
17:38:15
нет верных путей :)

Maxim
19.10.2018
17:38:26
вообще - глде можно почитать про бест практис в монге? про индексы/агрегации/выборки?

yopp
19.10.2018
17:38:33
если у вас коллекции по 100 мегабайт, делайте как быстрее

Maxim
19.10.2018
17:38:47

yopp
19.10.2018
17:38:51
если у вас десятки/сотни гигабайт, то тут тоже советы бесмысллено давать
потому что всё будет очень сильно зависеть от данных и того как вы их там дергаете
в целом если есть возможность, то лучше писать данных так, как вы их будете читать

Maxim
19.10.2018
17:41:02

AstraSerg
19.10.2018
18:09:08

Google

Maxim
19.10.2018
19:34:11
что лучше юзать: mongodb $arrayElemAt или unwind ?

Aleksandr
19.10.2018
20:17:40
от задачи зависит

M
20.10.2018
12:01:26
ребят может подскажет ктото если база забекаплена через —archive —gzip то ее можно востановить в другую (сменить имя) ?

Constantin
20.10.2018
12:03:33

M
20.10.2018
12:03:48

Constantin
20.10.2018
12:04:04
--gzip можно и без --archive применять, если что

M
20.10.2018
13:23:25
Бэкапить не в --archive
да тут дело что mongo в купере вот и использовал archive чтобы можно было легко востановить , а если без archive то большие трудности появляются с востановлением . на локальной машине нет mongorestore команды а вот как через всякие mongodb atlas или robo 3t я не нашел

Denys
20.10.2018
13:27:05
всем привет) подскажите плз, скачал один пример и надо запустить монго и мне надо указать путь через -- dbpath. а как мне сам путь узнать, монго я один раз устанавлил уже

Nick
20.10.2018
13:33:37

Pavel
21.10.2018
19:13:18
Всем привет, мб кто знает, есть ли ограничение на колл-во памяти(документов) в коллекции в mongoDb? А то для меня прям сегодня открытием стало что в одном документе можно хранить всего лишь 16мб...
P.S. В интернете так и не узнал точно есть ли такое ограничение или нет...

Max
21.10.2018
19:14:30
https://docs.mongodb.com/manual/reference/limits/
про кол-во документов лимиты не встречал, но 16 мегабайт на документ - да, это есть такое.

Pavel
21.10.2018
19:16:17
Ну вот я тоже не нашел не чего, а то просто мне нужно будет в коллекции очень, очень много хранить документов и я хз можно ли так организовать, ну скорее всего можно

Dmitriy
21.10.2018
19:17:24
ребят, подскажите, пожалуйста, как лучше организовать поиск по всем полям вложенного объекта?
Т.е. например есть документ { param: "value", name: { en: "...", ru: "...", de: "..." } } как лучше сделать поиск по полям объекта name? Понятно, что можно через or, но может есть варианты лучше?

yopp
21.10.2018
19:17:31
на размер коллекции нет ограничений

Max
21.10.2018
19:17:36

yopp
21.10.2018
19:21:01
есть ограничение на длинну индексируемого поля в 1024 байт или 8192 бит, так что максимальное количество документов которое можно вставить в коллекцию это что-то в духе 2^8192 или 10^2466 степени. Атомов во вселенной где-то 10^80

Pavel
21.10.2018
19:22:00
А нельзя ли просто как то повысить планку 16 мб? не прибегая к GridFS?

Google

yopp
21.10.2018
19:22:56
нет, нельзя

Andrew
21.10.2018
19:23:11
Повеселил

yopp
21.10.2018
19:27:15

Pavel
21.10.2018
19:30:52
а что вы храните?
Нужно будет хранить кучу сообщений, и так как в один документ все не влезет буду раскидывать все по так называемым ссылкам

yopp
21.10.2018
19:31:22

Pavel
21.10.2018
19:31:28
В одной коллекции будут хранится ссылки на объекты сообщений а в других сами сообщения
ну вроде на первый взгляд почти тоже самое что я и хочу сделать, но попозже все равно поподробнее почитаю
А хотя такая архитектура даже по лучше, спасибо)


Alex
22.10.2018
10:25:38
Приветы.
Парни, а кто подскажет, что не так. Дело происходит в aggregation фреймворке. На некоторой стадии пайплайна у меня пачка объектов вот такого вида:
{
_id: ObjectId(...),
items: [
{ externalId: ObjectId(...), ... }
]
}
Теперь я хочу в каждом объекте отфильтровать items так, чтобы в этом массиве остались только объекты, у которых externalId === _id.
Добавляю в пайплайн такой вот стейдж:
{
$project: {
_id: 1,
items: {
$filter: {
input: '$items',
cond: {
$eq: ['$$this.externalId', '$_id']
}
}
}
}
}
И на выходе стабильно получаю объекты с пустым массивом на месте items.
На SO по теме нашёл только такого же страдальца без ответов: https://stackoverflow.com/questions/43043927/how-to-filter-mongodb-aggregate-based-on-root-id
Есть мысли что я делаю не так?


yopp
22.10.2018
10:36:48
db.foo.insert({
"_id" : "4",
"ref" : "3",
"items" : [
{
"eid" : "1"
},
{
"eid" : "1"
},
{
"eid" : "1"
},
{
"eid" : "2"
},
{
"eid" : "3"
},
{
"eid" : "4"
}
]
})
db.foo.aggregate([
{
$project: {
items: {
$filter: {
input: "$items",
cond: { $eq: [ "$$this.eid", "$_id" ] }
}
}
}
}
])
{ "_id" : "4", "items" : [ { "eid" : "4" } ] }

Alex
22.10.2018
10:39:43
Хм. Минуту
Таак. Думал проблема с тем, что у тебя строки, а у меня ObjectId, но нет..
Ладно, пошёл думать, где в пайплайне ошибка.
Спасибо

yopp
22.10.2018
10:45:24
94% что в $_id не оригинальный _id
например если раньше group есть
ну или опечатка в имени поля :)

Alex
22.10.2018
10:56:40
Да не, просто данных километры, и я сильно не сразу сообразил, что на самом деле items лежит еще внутри другого массива

yopp
22.10.2018
10:57:19
а, ну или так, да :)

Alex
22.10.2018
10:57:52
Энивей, спасибо ?

Алексей
22.10.2018
14:08:33
Подскажите пож, как к этому добавить поле с тотал суммой $match: { type: 'in', sid: sid.key }
Т.е. чтобы было totalSum: сумма от $match: { type: 'in', sid: sid.key }
let sidPayments = Transaction.aggregate([
{
$match: { type: 'in', sid: sid.key }
},
{ $group: { _id: '$user', sum : { $sum: "$amount" } } },
{
$lookup:
{
from: "users",
localField: "_id",
foreignField: "_id",
as: "user_info"
}
}
]);

Google

Алексей
22.10.2018
14:10:29
Или так никак не сделать?
Хотелось бы одним запросом решить это

AstraSerg
22.10.2018
14:26:15
с сообтетствующим аккумулятором. Выбирайте какой вам подойдёт: https://docs.mongodb.com/manual/reference/operator/aggregation/#accumulators-group

Алексей
22.10.2018
14:32:08
Но на этой стоке я группирую по пользователям, и подсчитываю сколько один пользователь внёс
И также мне нужно знать сколько total sum по sid на всех транзакциях
как отдельный запрос это выглядит так
{
$match: { type: 'in', sid: sid.key }
},
{ $group: { _id: '$sid', sum: { $sum: "$amount" } } }

AstraSerg
22.10.2018
14:32:53

Алексей
22.10.2018
15:27:27
Извиняюсь, но я не понял. Можете объяснить как это получится, если они группируются по _id: '$user' и сумма у них складывается из документов, у которых user один и тот же, а мне нужна сумма из всех юзеров с этим sid
Я наверно туплю

AstraSerg
22.10.2018
15:28:43

Алексей
22.10.2018
15:29:14
Спасибо, жду : )