У меня есть вопрос, где я не могу найти решение.
У меня есть коллекция "medium" с массивом с глубоким вложением, в котором ссылка через ObjectID на коллекцию персонажа.
Средняя коллекция:
{
"title": "Test Medium",
"mediumMetaData": {
"metaData": [{
"movietype": "movie",
"year": 2019,
"language": "german",
"personInformation": {
"actor": [{
"actors": "5e2c3b1daf0ba75b00415bb0"
}],
"director": [{
"directors": "5e2c3b1daf0ba75b00415bb0"
}],
"screenwriter": [{
"screenwriters": "5e2c3b1daf0ba75b00415bb0"
}],
"camera": [{
"cameras": "5e2c3b81af0ba75b00415bb1"
}]
}
}]
},
"createdById": "5dcb108b59057b22702ecaa9"
}
Персональная коллекция должна совпадать через поле " _id ".
Теперь моя проблема , Я хочу создать агрегированный запрос со ссылкой на все objectIds в Person.
Я попробовал несколько способов сейчас, но поиск не будет совпадать вообще:
Это то, что я пытался прямо сейчас, но actor-tag все время пуст: первые два этапа работают, как я понял, мне нужно два раскручивания, по одному для каждой части массива.
db.getCollection("medium").aggregate(
[
{
"$match" : {
"_id" : ObjectId("5e2c3d9002d512c71cda8006")
}
},
{
"$unwind" : {
"path" : "$mediumMetaData.metaData",
"preserveNullAndEmptyArrays" : false
}
},
{
"$unwind" : {
"path" : "$mediumMetaData.metaData.personInformation.actor",
"preserveNullAndEmptyArrays" : false
}
},
{
"$lookup" : {
"from" : "person",
"let" : {
"actor_id" : "$mediumMetaData.metaData.personInformation.actor.actors"
},
"pipeline" : [
{
"$match" : {
"$expr" : [
{
"$eq" : [
"$_id",
"$$$actor_id"
]
}
]
}
},
{
"$project" : {
"_id" : 0.0
}
}
],
"as" : "actor1"
}
}
],
{
"allowDiskUse" : false
}
);
Может кто-нибудь помочь, пожалуйста?