2017-09-16 1 views
0

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" 
     } 
    ] 
} 

Répondre

1

Cela permettra d'économiser le contenu du tableau abréviation Retour à eOTD_term: Toutefois, si le résultat de l'agrégation est important, vous risquez de manquer de mémoire.

Vous pouvez également essayer d'utiliser « $ sur » scène au lieu de insertMany: How do I append Mongo DB aggregation results to an existing collection?

+1

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". –