Гость
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / MongoDB - аггрегация по двум коллекциям / 3 сообщений из 3, страница 1 из 1
03.10.2020, 01:00
    #40005052
RedRose
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MongoDB - аггрегация по двум коллекциям
Добры день, помогите плз чайнику.

еcть две коллекции : Employee(_id,..., workplace_id...) and Workplace(_id,...,name)

Мне надо посчитать кол-во рабочих по предприятиям. Я понимаю, что надо использовать lookup, aggregation, sum но получется только отдельно, как мне их обьединить?

запрос:

Код: python
1.
2.
3.
 query_result=db.employee.aggregate([{ "$group" : { "_id": "$workplace_id", "count": { "$sum": 1}}},
        { "$sort": { "count": -1 }} ]);
        pd.DataFrame(list(query_result))

дает кол-во рабочих по предприятиям

запрос дает канву обьеденения:

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
    pipeline = [
    {"$lookup": 
     { 
        "from": "workplace", 
        "localField": "workplace_id", 
        "foreignField": "_id", 
        "as": "workplace" 
     } }
   ]; 


теперь я пытаюсь их вместе связать и не работает:

Код: python
1.
2.
3.
4.
    query_result=db.employee.aggregate(pipeline([ 
    { "$group" : { "_id": "$workplace_id", "count": {"$sum": 1 }}},{"$sort": { "count": -1 }}]));

    pd.DataFrame(query_result);


как мне их запросить?
спасибо большое
...
Рейтинг: 0 / 0
07.11.2020, 02:11
    #40016162
bubuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MongoDB - аггрегация по двум коллекциям
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
>  db.Employee.find()
{ "_id" : "e1", "workplace_id" : "w1" }
{ "_id" : "e2", "workplace_id" : "w1" }
{ "_id" : "e3", "workplace_id" : "w1" }
{ "_id" : "e4", "workplace_id" : "w2" }
{ "_id" : "e5", "workplace_id" : "w3" }
{ "_id" : "e6", "workplace_id" : "w3" }
> db.Workplace.find()
{ "_id" : "w1", "name" : "workplace_1" }
{ "_id" : "w2", "name" : "workplace_2" }
{ "_id" : "w3", "name" : "workplace_3" }
{ "_id" : "w4", "name" : "workplace_4" }
> 

>  db.Workplace.aggregate([
...   {
...     $lookup:{
...              "from": "Employee", 
...              "localField": "_id", 
...              "foreignField": "workplace_id", 
...              "as": "emps" 
...     }
...   },
...   {
...     $unwind:"$emps"
...   },
...   {
...     $group:{
...              _id:"$name",
...              cnt:{$sum:1}
...             }
...   },
...   {
...     $sort: {_id:1} 
...    }
...  ])
{ "_id" : "workplace_1", "cnt" : 3 }
{ "_id" : "workplace_2", "cnt" : 1 }
{ "_id" : "workplace_3", "cnt" : 2 }
>  



или как outer join :

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
>  db.Workplace.aggregate([
...   {
...     $lookup:{
...              "from": "Employee", 
...              "localField": "_id", 
...              "foreignField": "workplace_id", 
...              "as": "emps" 
...     }
...   },
...   { $project:{name:1, cnt:{$size:"$emps"}}
...   },
...   {$sort:{name:1}}
...  ])  
{ "_id" : "w1", "name" : "workplace_1", "cnt" : 3 }
{ "_id" : "w2", "name" : "workplace_2", "cnt" : 1 }
{ "_id" : "w3", "name" : "workplace_3", "cnt" : 2 }
{ "_id" : "w4", "name" : "workplace_4", "cnt" : 0 }
>  
...
Рейтинг: 0 / 0
10.11.2020, 01:56
    #40016709
RedRose
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MongoDB - аггрегация по двум коллекциям
Спасибо, Bubuk, уже сама допетрила :)
...
Рейтинг: 0 / 0
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / MongoDB - аггрегация по двум коллекциям / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]