2016-04-04 14 views
0

So habe ich die folgende Aggregation und ich erhalte den Fehler ungültiger Operator $$ event.info.MongoDB - Invalid Operator - Aggregation

db.days.aggregate([ 
    { 
     $match : { 'day' : 'March_1'} 
    }, 
    { 
     $project: 
     { 
      _id:0, 
      day: 1, 
      events: 
      { 
       $filter: 
       { 
        input: '$events', 
        as: 'event', 
        cond: 
        { 
         $and: 
         [ 
          { 
           $eq: ['$$event.year', '2002'] 
          }, 
          { 
           '$$event.info' : {$regex: '.*peseta.*'} 
          } 
         ] 
        } 
       } 
      } 
     } 
    } 
]) 

Ereignis ist ein Array mit Objekten des Typs

{ 
    year : "x" 
    info : "y" 
} 

Könnten Sie mir bitte helfen, eine Erklärung einig?

Vielen Dank im Voraus!

+0

Sie können mit '$ regex' in' nicht project' $ – styvane

+0

Gibt es eine Abhilfe der Lage sein, eine zu verwenden, $ Regex wie Funktion in $ Projekt? –

+0

Wie gesagt, gibt es kein "logisches" Gegenstück für einen Ausdruck "$ regex". In diesem Fall sollten Sie das Array "$ abwickeln" und dann '$ match' mit einem regulären Abfrageausdruck hinterher" abwickeln ". Ich rate auch dringend, dass Sie die gleiche Bedingung in Ihrem ursprünglichen '$ match' enthalten. Andernfalls wählen Sie nur Dokumente aus, bei denen Array-Elemente den Bedingungen möglicherweise nicht entsprechen. Es sei denn, Sie beabsichtigen natürlich, auch "leere" Arrays zurückzugeben. –

Antwort

-1

Was ist Ihre erwartete Ausgabe. Wenn Sie nur Sie benötigen keine Aggregation Rahmen wollen passen für it.just finden verwenden db.days.find({'day' : 'March_1',event :{$elemMatch :{'year', '2002',info' : {$regex: '.*peseta.*'}}})

+0

Warum dies negativ bewertet wurde, bitte korrigieren Sie mich, wenn ich falsch liege –