yopp
Nikita
Nikita
нифига, ошибаюсь )
Nikita
в общем мне нужен left join )
yopp
Это просто left join. Вы хотите выбрать документы которые есть в коллекции A и добавить к ним пересечение по свойству X в коллекции B. Это просто $lookup
Nikita
yopp
Что значит «только пересечение»?
Расскажите свою задачу
Nikita
$pipeline = [
[
'$match' => [
'_id' => new \MongoDB\BSON\ObjectID($params['id'])
]
], [
'$unwind' => '$invites'
], [
'$lookup' => [
'from' => 'users',
'localField' => 'invites.email',
'foreignField' => 'mail',
'as' => 'invitedUser'
]
], [
'$unwind' => [
'path' => '$invitedUser'
]
], [
'$project' => [
'email' => '$invites.email',
'status' => '$invites.status',
'name' => '$invitedUser.givenName',
'userId' => '$invites.userId'
]
]
];
Nikita
yopp
А что у вас в пайплайне после $lookup?
Nikita
выше весь пайплайн )
yopp
перефразирую: какие документы у вас возвращаются в результате выполнения $lookup
Nikita
перефразирую: какие документы у вас возвращаются в результате выполнения $lookup
приходит два документа:
[{"email":"dream@gmail.com","status":"active","name":"Никита","userId":"5d5b88391b8a41e5a7996184",},{"email":"testadmin@example.com","status":"active","userId":"5d6fcaa538fa266712e4c300","name":"Тестер Стрижак"}]
а должно быть еще несколько, для которых в users не нашлось записей
Nikita
Nick
приходит два документа:
[{"email":"dream@gmail.com","status":"active","name":"Никита","userId":"5d5b88391b8a41e5a7996184",},{"email":"testadmin@example.com","status":"active","userId":"5d6fcaa538fa266712e4c300","name":"Тестер Стрижак"}]
а должно быть еще несколько, для которых в users не нашлось записей
у вас есть анвинд, после него сколько доков получается?
Nikita
Nick
это после первого анвинда?
Nick
и что после лукапа и до второго анвинда
Nikita
после второго анвинда уже два документа
Nick
вот и ответ, у вас после лукапа один из доков с пустым массивом, а анвинд генерит только при ниличии записей в массиве
Nick
так что проверьте что после лукапа получаете то что нужно и дальше развлекайтесь без анвиндов
Vasily
Добрый вечер!
Подскажите пожалуйста, как можно произвести вот такое преобразование? в какую сторону гуглить?
Nick
Nick
потом анвиндом
Nick
если операция разовая, то можете $project попробовать
Nick
Roman
ночи
почему то на новом сервере через SSH туннель не могу подключится
Roman
Roman
Roman
обновил робо3т - пошло
Roman
всем спасибо
Артем
Подскажите пожалуйста, есть ли какие то ограничения на число шагов в Aggregation Pipeline при создании пайплайнов в Compass? Делаю длинный пайплайн (шагов 12-15), он работает, сохраняю его. После этого загружаю его из памяти компаса и не получается произвести даже первый шаг, выскакивает ошибка timeout. Хотя при последовательном создании шагов агрегации все работает
Nick
Артем
На первом шаге пайплайна
Артем
Сори, что не скрин. Телеграм на компе никак не работает
Артем
В таком состоянии он виснет и никуда не двигается. Хотя если начать создавать с нуля такой же пайплайн, все будет хорошо
Артем
Причем такая ситуация не только с этим пайплайном. Может быть нужно какие то настройки на хосте поменять и сам компас не причем?
Vova
Какой командой сделать инкремент поля с датой? Например, 23/03/2020 00:00:00 записано в бд, надо сделать 24/03/2020 02:00:00. Есть идеи? Подумываю хранить в секундах с unix epoch, но может есть что-то более адекватное
RapidCodeLab
RapidCodeLab
очень леко все гуглится, не ленитесь)
Vova
{
$set: {
field: {
$add: [ "$field", 2*24*60*60*1000 ]
}
}
}
Vova
Такое нашёл, из новой версии 4.2
RapidCodeLab
тоже самое, вид сбоку
Den
Всем доброго времени, уважаемые знатоки, подскажите пожалуйста, как тут вместо группировки по мыссиву сделать групировку по названию статуса aggregate([
{ $project: { id: 1, status: { $slice: [ "$status", -1 ] } } },
{ $group: { _id: '$status.name', total: { $sum: 1 }, ords: { $push: "$$ROOT" } } },
{ $sort: { total: -1 } }
])
Den
содержание поля status : [
{
"name" : "Received",
"date" : ISODate("2019-05-05T13:10:22.193Z"),
"_id" : ObjectId("5ccee0be944af2343dd5fd5a"),
"modifier" : "System"
},
{
"name" : "Approved",
"date" : ISODate("2019-05-07T14:19:09.313Z"),
"modifier" : "den@gmail.com",
"comments" : "",
"_id" : ObjectId("5cd194279bb2671931113fd1")
},
{
"name" : "Approved",
"date" : ISODate("2019-05-07T15:36:08.027Z"),
"_id" : ObjectId("5cd1a5efbbed982e6e91c6e2"),
"comments" : "",
"modifier" : "den@gmail.com"
}]
Nick
Всем доброго времени, уважаемые знатоки, подскажите пожалуйста, как тут вместо группировки по мыссиву сделать групировку по названию статуса aggregate([
{ $project: { id: 1, status: { $slice: [ "$status", -1 ] } } },
{ $group: { _id: '$status.name', total: { $sum: 1 }, ords: { $push: "$$ROOT" } } },
{ $sort: { total: -1 } }
])
если вам нужно по отедльным статусам работать, то воспользуйтесь $unwind чтобы его развернуть в обычные доки и дальше уже ваша группировка
Roman
привет ребят
Roman
я помню давно тут спрашивал и мы нашли как сделать projection в драйвере ноды для find
Roman
но я снова забыл, в доке указано неверно и в туторилах это точно
Roman
projection наверное
Roman
не fields
Vova
Roman
Roman
устроили блин путаницу
Vova
Roman
наверное это один из моих вопроов 🙂
будут проблемы напишу
Vova
Roman
Vlad🍁
Чем отличается установка монго с докера и нативно?
Sebor▂▅▇█▓▒░
Одно в докере, другое нативно
Nikita
Ребят, а что у Монги произошло с лицензией?
Nikita
Дропнули из репозиториев многих дистрибутивов в начале года.
Nikita
"Таким образом, хотя SSPL не отличается от GNU AGPLv3, со всеми обычными свободами использования, модификации и распространения кода (и практически тем же языком), SSPL явно заявляет, что любой, кто хочет предложить MongoDB как услугу (или другое ПО под этой лицензией), должен либо получить коммерческую лицензию, либо открыть исходный код сервиса, чтобы помочь сообществу."
Nikita
Никто не вникал? Если есть условно веб приложение / сайт использующий MongoDB, то необходимо ли открывать исходные коды?
Dmitriy
как я понимаю эту часть, соответственно
yopp
yopp
yopp
yopp
Требование в части публикации исходного кода касается только кода оркестрации монги в случае если исходный код используется для предоставления базы данных как услуги.
yopp
Выпилили поборщики СПО, которые считают такие требования лицензии нарушением «свободы» по этому монга в головах укушенных столлманом теперь несвободное ПО
А страдаете вы
yopp
Но самое главное что у монги есть свои репозитории для официально поддерживаемых платформ, которые в отличии от «штатных» нормально обновляются.
Пользуйтесь ими
Nikita
"A company that offers a publicly available MongoDB as a service must release the software it uses to offer such service under the terms of the SSPL, including the management software, user interfaces, application program interfaces, automation software, monitoring software, backup software, storage software and hosting software, all such that a user could run an instance of the service using the source code made available."
Nikita
Nikita
https://repo.mongodb.org/
yopp