RUE*_*INE 2 mongodb mongodb-query aggregation-framework
我在 mongodb 聚合中有一个匹配表达式。匹配中包含 3 个字段,但它们并不总是包含数据。我只想在字段不为空时将字段包含在匹配中。
如果所有字段都有数据,则匹配的样子,但例如,如果用于的数组为studentGradeLevels空,那么我不想包含它,或者我希望查询仍然返回数据而忽略空参数。
$match: {
"school._id": "7011",
"studentGradeLevels": { $in: ["09", "10", "11", "12"] },
"contentArea": {
$in: [
"English 1"
]
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法动态构建匹配,以便我只包含我想要的字段(如果它们为空或不为空),或者在查询中执行某些操作,以便忽略空参数。
$in当数组不为空时可以使用,$nin当数组为空时可以使用,这样匹配字段就不会被考虑在内($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
}
}])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1769 次 |
| 最近记录: |