powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / MongoDB - аггрегация по двум коллекциям
3 сообщений из 3, страница 1 из 1
MongoDB - аггрегация по двум коллекциям
    #40005052
RedRose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добры день, помогите плз чайнику.

е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
MongoDB - аггрегация по двум коллекциям
    #40016162
bubuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
MongoDB - аггрегация по двум коллекциям
    #40016709
RedRose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, Bubuk, уже сама допетрила :)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / MongoDB - аггрегация по двум коллекциям
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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