MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Verwendung von $unwind und $text im Aggregationsframework mongodb

Die folgende Antwort liefert Ihre gewünschten Ergebnisse. das erste $match wird nur zum Filtern von Dokumenten ohne cat verwendet überhaupt, mit Hilfe des text Index. Wenn Sie diese Stufe nicht verwenden, sind die Ergebnisse gleich und korrekt, aber möglicherweise langsamer.

db.pages.aggregate([
     {
         $match: {
             $text: {
                 $search: "cat"
             }
         } 
     },
     {
         $unwind: '$articles'
     },
     {
         $match: {
             'articles.articleContent': /cat/
         }
     },
     {
         $group: {
             _id: {
                 _id: '$_id',
                 pageNo: '$pageNo'
             },
             articles: {
                 $push: '$articles'
             }
         }
     },
     {
         $project: {
             _id: '$_id._id',
             pageNo: '$_id.pageNo',
             articles: 1
         }
     }
])