Vous pouvez utiliser $in
lorsque le tableau n'est pas vide et $nin
lorsque le tableau est vide, ainsi le champ match ne sera pas pris en compte ($nin : []
):
function buildMatch(arr) {
var matcher = {};
if (arr.length == 0)
matcher["$nin"] = arr;
else
matcher["$in"] = arr;
return matcher;
}
var grades = ["09", "10", "11", "12"];
var areas = [ "English 2" ];
var gradeMatch = buildMatch(grades);
var areaMatch = buildMatch(areas);
db.students.aggregate([{
$match: {
"school._id": "7011",
"studentGradeLevels": gradeMatch,
"contentArea": areaMatch
}
}])