У меня есть три коллекции, Posts, Languages и Translations. Структура примерно такая:
Post: {
id: ObjectID
title: String,
translated_versions: ObjectID
}
TranslatedVersion: {
id: ObjectID
translations: Translation[]
}
// Не коллекция, просто структура объекта внутри TranslatedVersion.translations
Translation: {
post: ObjectID
language: ObjectID
}
Language {
id: ObjectID
name: String
}
При получении поста я хочу получить TranslatedVersion по id, затем для каждой записи внутри TranslatedVersion.translations я хочу получить объект языка и объект поста, то есть примерно такую структуру получить на выходе:
Post {
title: "Test title",
translated_versions: {
id: 'some-id',
tranlations: [
Translation {
language: {
id: 'some-id',
name: 'Turkish'
},
post: {
id: 'some-id'
title: 'Turkish post'
}
},
Translation {
language: {
id: 'some-id',
name: 'English'
},
post: {
id: 'some-id',
title: 'English post'
}
}
]
}
}
Сейчас для этого я пытаюсь использовать несколько стадий lookup и unwind, но на выходе получаю не совсем тот результат, который нужен.
Golang:
lookup_translations_group := bson.D{
{
Key: "$lookup", Value: bson.D{
{
Key: "from", Value: Models.Translation,
},
{
Key: "localField", Value: "translations_group_id",
},
{
Key: "foreignField", Value: "_id",
},
{
Key: "as", Value: "translations",
},
},
},
}
unwind_translations_group := bson.D{
{
Key: "$unwind", Value: bson.D{
{
Key: "path", Value: "$translations",
},
{
Key: "preserveNullAndEmptyArrays", Value: true,
},
},
},
}
lookup_translations_posts := bson.D{
{
Key: "$lookup", Value: bson.D{
{
Key: "from", Value: Models.Post,
},
{
Key: "localField", Value: "translations.translations.post",
},
{
Key: "foreignField", Value: "_id",
},
{
Key: "as", Value: "translations.translations.post",
},
},
},
}
Однако, на выходе у меня получается вот такая структура:
Очевидно, что мой пайплайн получается косячный, но я не могу понять, как сделать это правильно