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