1

Моя база данных содержит пользователя collection в виде:Совокупный запрос для одной коллекции

{ 
    "userId": "12345", 
    "vertical": "BFS", 
    "Role": "Manager" 
}, 
{ 
    "userId": "12345", 
    "vertical": "Insurance", 
    "Role": "Manager" 
}, 
{ 
    "userId": "12367", 
    "vertical": "BFS", 
    "Role": "Associate" 
} 

Я знаю vertical и manager и от этого я должен найти userId. Затем я должен найти verticals конкретного пользователя.

Как и в SQL:

select vertical 
from user 
where role="Manager" 
    and userid in (
     select userid from user 
     where vertical="BFS" and role="Manager" 
    ) 

Просьба помочь в этом. Я новичок в этой технологии.

ответ

0

Проблема: Мы хотели бы получить данные, где менеджер в BFS вертикали играет роль менеджера в других вертикалей, а также.

Я бы справился с этой проблемой с помощью агрегатной рамки, доступной в MongoDB.

Вот объяснение против каждого конвейера в нижеследующем запросе.

1) $ Match - Получить все данные, где роль является менеджером, потому что мы заинтересованы в роли менеджера только

2) $ проекта - Просто промежуточный трубопровод проекта поля для следующего трубопровода

3) $ группа - по аналогии с SQL, чтобы сгруппировать данные по USERID и добавить их вертикалей в массив

4) $ Match - для того, чтобы отфильтровать UserIds, где они являются частью BFS

db.vertical.aggregate([ 
    {$match : { "Role": "Manager"}}, 
    {$project : { "userId" : 1, "vertical" : 1, "Role" : 1}}, 
    {$group : { _id : "$userId", "verticalsArray" : {$push : "$vertical"} } }, 
    {$match : { "verticalsArray": "BFS"}}, 
]); 

Выход: -

{ 
    "_id" : "12345", 
    "verticalsArray" : [ 
     "BFS", 
     "Insurance" 
    ] 
} 
+0

бы не этот перерыв на что-то вроде этого - { "USERID": "12345", "вертикали": "BFS", "Роль": "Менеджер" }, { "идентификатор пользователя": "12345", "вертикали": "Страхование", "Роль": "Associate" }, так как ему нужно найти все вертикалей для идентификатора пользователя 12345. –

+0

Нет, это Wouldn» т. Я попытался с образцом данных, которые указаны в вопросе, и мой ответ имеет вывод, предполагая, что я правильно понял вашу проблему. Я также подытожил свое понимание в своем ответе. – notionquest

+0

Он сломается для данных, которые я дал. Человек может иметь разные обозначения для разных вертикалей. Ваша фаза $ match удалит документ для userid 12345, где он не является менеджером, и вы не получите его вертикаль для этого документа. –

Смежные вопросы