Вы можете использовать ниже aggregation
db.collection.aggregate([
{ "$project": {
"plus": {
"$map": {
"input": "$elements",
"as": "s",
"in": {
"elements": "$$s.elements",
"score": { "$cond": [{ "$in": ["$$s.element", ["abc"]] }, 5, 0] }
}
}
},
"minus": {
"$map": {
"input": "$elements",
"as": "s",
"in": {
"elements": "$$s.elements",
"score": { "$cond": [{ "$in": ["$$s.element", ["def", "ghi"]] }, 1, 0] }
}
}
}
}},
{ "$project": {
"score": { "$subtract": [{ "$sum": "$plus.score" }, { "$sum": "$minus.score" }] }
}}
])
Если вы хотите сделать с одной $project
ступенью
db.collection.aggregate([
{ "$project": {
"score": {
"$subtract": [
{ "$sum": {
"$map": {
"input": "$elements",
"in": { "$cond": [{ "$in": ["$$this.element", ["abc"]] }, 5, 0] }
}
}},
{ "$sum": {
"$map": {
"input": "$elements",
"in": { "$cond": [{ "$in": ["$$this.element", ["def", "ghi"]] }, 1, 0] }
}
}}
]
}
}}
])