Je voudrais savoir comment sauvegarder une partie du document, la méthode $ lookup me revient. Voici un exemple:
Comment enregistrer uniquement le groupe d'abréviations dans la collection eOTD_term
?
J'ai deux collections:
ex. doc de eOTD_abbreviation
{
"_id" : ObjectId("59bc32fd7d7934a6a7a47d08"),
"abbreviationID" : "0161-1#AB-000282#1",
"termID" : "0161-1#TM-623205#1",
"abbreviation" : "CONSTR,LGHT"
}
ex. doc de eOTD_term
{
"_id" : ObjectId("59bc2d7e7d7934a6a7777540"),
"termID" : "0161-1#TM-623205#1",
"conceptID" : "0161-1#01-082401#1",
"term" : "CONSTRUCT,LIGHT",
}
termID
est ma clé unique qui existe dans les deux collections.
J'ai essayé ce qui suit:
db.eOTD_term.aggregate([
{
$lookup: {
from: "eOTD_abbreviation",
localField: "termID",
foreignField: "termID",
as: "abbreviation"
}
},
{
$match: { abbreviation: { $ne: [] } }
}
]);
Et je retourner (l'un des documents les retours d'agrégation):
{emphasized text
"_id" : ObjectId("59bc2d7e7d7934a6a7777540"),
"termID" : "0161-1#TM-623205#1",
"conceptID" : "0161-1#01-082401#1",
"term" : "CONSTRUCT,LIGHT",
"abbreviation" : [ <----------- THIS ARRAY
{
"_id" : ObjectId("59bc32fd7d7934a6a7a47d08"),
"abbreviationID" : "0161-1#AB-000282#1",
"termID" : "0161-1#TM-623205#1",
"abbreviation" : "CONSTR,LGHT"
}
]
}
Il convient de noter que le simple fait de placer '$ unwind' directement après la' lookup' de $ fait la 'match' de $ redondante et beaucoup plus efficace en raison de [comment MongoDB gère réellement cette combinaison en interne] (https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/#lookup-unwind-coalescence). Notez aussi que '$ out' échouerait si les nouvelles valeurs de' 'root '' _id' ne sont pas uniques, mais serait généralement préférable à l'introduction de tous les résultats dans '.insertMany()' sans demandes de "batching". –