#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"] ]
}
}
}
}
}