Мне нужно выполнить агрегирование коллекции mongodb. Но я не могу найти правильный конвейер агрегации.
На самом деле мне нужно получить идентификаторы разных документов при field1 == field2
(поле 1 не в том же документе, что и поле 2).
Например, я хочу найти все документы, когда источник совпадает с целевым: document1.fieldX == document2.fieldY
Речь идет о поиске целевого сервера по номерам портов.
Примеры документов:
[
{
id: 444,
name: 'Server 1'
portSource: 1,
portTarget: 7,
},
{
id: 555,
name: 'Server 2'
portSource: 7,
portTarget: 1
},
{
id: 666,
name: 'Server 3'
portSource: 1,
portTarget: 8
},
{
id: 777,
name: 'Server 4'
portSource: 3,
portTarget: 5
},
{
id: 888,
name: 'Server 5'
portSource: 5,
portTarget: 3
},
]
Желаемый результат:
[
{
portSource: 1, portTarget: 7, sourceId : 444, targetId: 555
},
{
portSource: 3, portTarget: 5, sourceId : 777, targetId: 888
}
]
Изменить:
Примечание 1 : сервер с id: 666
не возвращается, потому что любой другой сервер соответствует его целевому порту.
Примечание 2 : Правильный вывод также может быть таким:
(Перевернутая цель / источник)
[
{
portSource: 7, portTarget: 1, sourceId : 555, targetId: 444
},
{
portSource: 5, portTarget: 3, sourceId : 888, targetId: 777
}
]
Или он может содержать дважды (Обычный способ и перевернутый):
[
{
portSource: 1, portTarget: 7, sourceId : 444, targetId: 555
},
{
portSource: 7, portTarget: 1, sourceId : 555, targetId: 444
},
{
portSource: 3, portTarget: 5, sourceId : 777, targetId: 888
},
{
portSource: 5, portTarget: 3, sourceId : 888, targetId: 777
}
]