/ / Utilisation de $ lookup pour trouver l'identifiant d'un tableau dans un tableau - mongodb, lookup

Utiliser $ lookup pour trouver l’identifiant d’un tableau à un autre - mongodb, lookup

Je sais que nous devons dérouler un tableau avant d'utiliserrecherche, mais existe-t-il un moyen de dérouler le tableau sur l'autre document avant d'effectuer la recherche? À l’heure actuelle, j’obtiens tout le tableau où la valeur est incluse.

Comme solution alternative, comment filtreriez-vous l’ensemble du tableau afin de ne conserver que la valeur de référence sur chaque document?

MODIFIER: Par exemple

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

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

Dans cet exemple, je voudrais utiliser ce code pour récupérer les valeurs liées:

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

Mais je voudrais obtenir quelque chose comme ça:

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

Au lieu de cela:

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

Réponses:

2 pour la réponse № 1

$ lookup récupère le document complet avec les critères correspondants. Dans ce cas particulier, pour éliminer les éléments inutiles, vous pouvez utiliser $ filter dans le pipeline $ project, comme ceci:

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

Pour autant que je sache, il n’ya pas d’autre solution possible pour le moment.