Jawaban di bawah ini akan mengembalikan hasil yang Anda inginkan. $match
pertama hanya digunakan untuk memfilter dokumen tanpa cat
di dalamnya, dengan bantuan text
indeks. Jika Anda tidak menggunakan tahap ini, hasilnya akan sama dan benar tetapi mungkin lebih lambat.
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
}
}
])