Я относительно новичок в агрегации mongodb, и у меня есть крошечная проблема:
Я хочу объединить две коллекции. Проблема в том, что внешнее поле помещается во внутренний массив. Это означает, что мне нужно развернуть массив, чтобы получить правильное соответствие $. В моем $ match я использую $ epxr и $ eq, чтобы объединить ненужные документы (что не является проблемой). $ Expr необходим для доступа к переменным из оригинальной коллекции:
[
...
{
$lookup: {
from: 'foreignCollection',
as: 'field',
let: {
localField: '$someComparisonField'
},
pipeline: [
{
$unwind: '$arr'
},
{
$match: {
$expr: {
$eq: [ '$arr.foreignField', '$$localField' ]
}
}
}
]
}
}
]
Однако field
всегда является пустым массивом в моем наборе результатов. Я серьезно не знаю, что я делаю не так: D
Может ли кто-нибудь мне помочь?
Edit:
В соответствии с запросом, некоторые образцы данных для двух участвующих коллекций:
orginalCollection:
{
...
someComparisonField: 1
},
{
...
someComparisonField: 2
}
foreignCollection:
{
...
arr: [
{
...
foreignField: 1
},
{
...
foreignField: 1
},
{
...
foreignField: 2
},
]
},
{
...
arr: [
{
...
foreignField: 1
},
{
...
foreignField: 2
},
{
...
foreignField: 2
},
]
},
{
...
arr: [
{
...
foreignField: 2
},
{
...
foreignField: 1
},
{
...
foreignField: 2
},
]
},
Редактировать 2:
Я забыл добавить небольшую деталь: с $ eq во внутреннем конвейере я получаю доступ к фиксированному индексу, который означает, что foreignField
на самом деле выглядит так: foreignField: [ <value> ]
.