Вы можете использовать структуру агрегации, которая имеет некоторые операторы, которые вы можете использовать. Рассмотрим первый случай использования, который смотрит на манипулировании date operators внутри $project
трубопровода и последующего $match
трубопровода для фильтрации документов на основе дополнительного поля с выражением на $month
:
db.collection.aggregate([
{
"$project": {
"productName": 1,
"expiredDate": 1,
"expiredMonth": { "$month": "$expiredDate" }
}
},
{ "$match": { "expiredMonth": 11 } }
])
другой опция использует один конвейер с оператором , который включает в себя функциональность $project
и $match
, как указано выше, и возвращает все документы, которые соответствуют заданному условию, используя $$KEEP
системную переменную, отбрасывая те, которые не совпадают с помощью системной переменной $$PRUNE
. Имейте в виду, что этот оператор выполняет сканирование коллекции, поэтому первая оптимальная схема трубопровода может быть оптимальной:
db.collection.aggregate([
{
"$redact": {
"$cond": [
{
"$eq": [
{ "$month": "$expiredDate" },
11
]
},
"$$KEEP",
"$$PRUNE"
]
}
}
])
кажется работающим. Сначала я изучу структуру агрегации, а затем применил ее для моего варианта использования. Потому что на самом деле мой вариант использования немного отличается от этого примера. Спасибо за ваше объяснение. – Kim