我在 mongodb 聚合中有一个匹配表达式。匹配中包含 3 个字段,但它们并不总是包含数据。我只想在字段不为空时将字段包含在匹配中。
如果所有字段都有数据,则匹配的样子,但例如,如果用于 studentGradeLevels
的数组为空,那么我不想包含它,或者我希望查询仍然返回数据,忽略空参数。
$match: {
"school._id": "7011",
"studentGradeLevels": { $in: ["09", "10", "11", "12"] },
"contentArea": {
$in: [
"English 1"
]
}
}
有没有办法动态构建匹配,以便我只包含我想要的字段(基于它们是否为空),或者在查询中执行某些操作,以便忽略空参数。
最佳答案
您可以使用$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
}
}])
关于mongodb - 如何动态构建mongodb查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42315649/