/ / Użycie $ lookup do znalezienia id z tablicy do tablicy - mongodb, lookup

Używanie $ lookup do znalezienia id z tablicy do tablicy - mongodb, lookup

Wiem, że musimy rozwinąć tablicę przed użyciemwyszukiwanie, ale czy jest jakiś sposób na rozwinięcie tablicy na innym dokumencie przed przeprowadzeniem wyszukiwania? W tej chwili właśnie otrzymuję pełną tablicę, w której znajduje się wartość.

Jako alternatywne rozwiązanie, w jaki sposób chciałbyś filtrować pełną tablicę, aby zachowała tylko wartość, do której odwołuję się w każdym dokumencie?

EDYTOWAĆ: Jako przykład

COLLECTION AAA
{
array:[
{_id:01},
{_id:02}
]
}

COLLECTION BBB
{
array:[
{AAA_id:01},
{AAA_id:02}
]
}

W tym przykładzie użyję tego kodu do pobrania powiązanych wartości:

db.BBB.aggregate(
{$unwind: "$array"},
{
$lookup:
{
from: "AAA",
localField: "array.AAA_id",
foreignField: "array._id",
as: "linked"
}
}
)

Ale dostawałbym coś takiego:

{
array:[
{AAA_id:01}
]
linked:[
{_id:01},
{_id:02}
]
}
{
array:[
{AAA_id:02}
]
linked:[
{_id:01},
{_id:02}
]
}

Zamiast tego:

{
array:[
{AAA_id:01}
]
linked:[
{_id:01}
]
}
{
array:[
{AAA_id:02}
]
linked:[
{_id:02}
]
}

Odpowiedzi:

2 dla odpowiedzi № 1

$ lookup pobiera pełny dokument z dopasowanymi kryteriami. W tym konkretnym przypadku, aby pozbyć się niepotrzebnych elementów, można użyć $ filter w $ potoku projektu, podobnie jak w przypadku:

$project : {
_id : 1, //list all field here
linked: {
$filter : {
input : "$linked",
as : "item",
cond : {
$eq : ["$$item._id", "$$array.AAA_id"]
}
}
}
},

AFAIK nie ma jeszcze innego wyjścia.