$nin в рамках конвейера агрегации $проекта MongoDB

#mongodb #aggregation-framework

Вопрос:

Я создаю конвейер агрегации MongoDB с $project шагом в нем. Я хочу отфильтровать некоторые вложенные документы внутри allFields массива с $nin помощью условия (см. Фрагмент кода внутри cond шага). Однако этот запрос выдает мне ошибку, в которой указано следующее: Нераспознанное выражение ‘$nin’

Когда я переодеваюсь $nin $in , все в порядке и работает так, как ожидалось. Почему $nin здесь возникает ошибка?

 $project: {
    "TransactionMonth": 1,
    "allFields": {
        "$filter": {
            "input": "$allFields",
            "as": "allFields",
            "cond": {
                "$nin": [ "$allFields.CustomerType", ["A", "B", "C"] ]
            }
        }
    }
}
 

Ответ №1:

$nin-это оператор запроса, который можно использовать только на $match этапе агрегирования,

Вы можете попробовать $not и $in операторы справиться с вашим делом,

 $project: {
    "TransactionMonth": 1,
    "allFields": {
        "$filter": {
            "input": "$allFields",
            "as": "allFields",
            "cond": {
                "$not": {
                  "$in": [ "$allFields.CustomerType", ["A", "B", "C"] ]
                }
            }
        }
    }
}