1

i Abfrage haben:Mongoose Abfrage mit Projekt und filtern

Model.aggregate([{ 
     $lookup: { 
      from: 'translations', 
      localField: '_id', 
      foreignField: 'item_id', 
      as: 'translation' 
     }, 
    }, { 
     $project: { 
      "label": "$label", 
      "items": "$items", 
      "translation": { 
       "$filter": { 
        "input": "$translation", 
        "as": "page", 
        "cond": { 
         "$eq": ["$$page.lang_key", lang] 
        } 
       } 
      } 
     } 
    }]) 

und Ergebnis:

[ { _id: 58b2ca5b9ac42bac7aaed48a, 
    label: 'Main', 
    items: [ [Object] ], 
    translation: [ [Object] ] } ] 

Wie so machen, dass das Feld translation war kein Array? Weil ich immer nur ein Element in Array erhalten ...

Antwort

1

Da Sie nur ein Element in dem Array erhalten, können Sie entweder $unwind oder $arrayElemAt das Array zu glätten und ein Unterdokument zu erzeugen. Für Letzteres sollte etwas wie das Folgende für Sie arbeiten:

Model.aggregate([ 
    { 
     "$lookup": { 
      "from": "translations", 
      "localField": "_id", 
      "foreignField": "item_id", 
      "as": "translation" 
     } 
    }, 
    { 
     "$project": { 
      "label": 1, "items": 1, 
      "translation": { 
       "$arrayElemAt": [ 
        { 
         "$filter": { 
          "input": "$translation", 
          "as": "page", 
          "cond": { "$eq": ["$$page.lang_key", lang] } 
         } 
        }, 
        0 
       ] 
      } 
     } 
    } 
]) 
+1

VIELE viele, vielen Dank es funktioniert!))) –