вы можете сделать это следующим образом, при условии, что количество языков равно stati c.
var langs = ['hindi', 'tamil', 'english']; //arrange the languages in the priority you want
var limit = 5;
db.videos.aggregate(
[
{
$group: {
_id: null,
vids: {
$push: '$$ROOT'
}
}
},
{
$project: {
vids: {
$concatArrays: [
{
$slice: [
{
$filter: {
input: "$vids",
cond: { $eq: ["$$this.language", langs[0]] }
}
}, limit
]
},
{
$slice: [
{
$filter: {
input: "$vids",
cond: { $eq: ["$$this.language", langs[1]] }
}
}, limit
]
},
{
$slice: [
{
$filter: {
input: "$vids",
cond: { $eq: ["$$this.language", langs[2]] }
}
}, limit
]
}
]
}
}
},
{
$unwind: '$vids'
},
{
$replaceWith: '$vids'
},
{
$limit: limit
}
])
. Обязательно добавьте индекс в поле языка.