У меня есть две коллекции, где у первой есть внешние ключи второй коллекции.Теперь я хочу объединить совпадающие данные второй коллекции.Проблема в том, что я не знаю, как правильно определить путь к localField
, потому что он находится в объекте объектов.В какой-то момент он будет изменен на массив объектов, но сейчас я должен разобраться с этим.Структуры коллекции выглядят следующим образом:
collectionOne
{
_id: ObjectId('...'),
groups: {
'1': {
things: [{
id: xyz,
foreignId: ObjectID('001') // id of collectionTwo
}]
},
'2': {
things: [{
id: zyx,
foreignId: ObjectId('001') // id of collectionTwo
}]
},
}
}
collectionTwo
{
_id: ObjectID('001').
...
}
Я прочитал документы и искал здесь и в других местах, но я не сталНе могу найти ни одного подходящего случая.Для массивов, которые я знаю, мне не нужно указывать фактическое место в массиве.Поэтому, если groups
также будет массивом объектов, я мог бы просто использовать оператор точки следующим образом:
collectionOne.aggregate([
{$match: {_id, ObjectID('...')},
{$lookup: {
from: 'collectionTwo',
localField: 'groups.things.foreignId',
foreignField: '_id',
as: 'aggregatedThings'
}},
])
Так что я хочу задать localField
путь, который соответствует каждому объекту в groups
.Примерно так: $
является заполнителем для каждого ключа:
collectionOne.aggregate([
{$match: {_id, ObjectID('...')},
{$lookup: {
from: 'collectionTwo',
localField: 'groups.$.things.foreignId',
foreignField: '_id',
as: 'aggregatedThings'
}},
])
Надеюсь, моя проблема ясна.Ценю любую помощь.:)