2016-07-09 11 views
1

Ich bekomme einen Fehler bei der Verwendung von $ Regex in Mongoose Aggregation Abfrage. Ich erhalte einen ungültigen Operator mit Fehler Nr. 15999. Bitte helfen Sie Jungs.

{ $match: { "_id": ObjectId(req.headers.token) } }, { 
         $project: { 
          inventory: { 
           $filter: { 
            input: '$inventory', 
            as: 'inventory', 
            cond: {$or:[{"$$inventory.item":new RegExp('^'+req.query.text+'$', "i")},{"$$inventory.sku":new RegExp('^'+req.query.text+'$', "i")}]} 
           } 
          }, 
          _id: 0 
      } 
    } 
+0

können Sie prüfen, req.query.text als String –

+0

Wenn Sie JS-Code verwenden können, versuchen zu entkommen es als 'req.query.text.replace (/ [- \/\\^$ * + ?.() | [\] {}]/g, '\\ $ &')'. Wenn der Text '[' oder '(' oder andere spezielle Regex-Metazeichen enthält, sollte dies das Problem beheben. –

+0

Nicht sicher, ob Sie regex in $ project verwenden können http://stackoverflow.com/questions/29866336/regex-within- Projekt-Mongodb-Aggregation – jpaljasma

Antwort

1

Sie können regex in $ passen und Sie werden Ihr Ergebnis wie in diesem Beispiel erhalten

Pincodes.aggregate([ 
{ "$match": { "district": new RegExp('^' + req.query.district, "i") } 
}, 
{ "$group": { "_id": "$district" } }]) 
.exec((err, data) => { 
if (err) { 
res.status(500).json({ 
data: err 
}) 
} 
else { 
res.status(200).json({ 
data: data 
}) 
} 
})