Вам необходимо добавить префикс «выражений полей» к $
. Это также может быть просто сделано в .find()
db.getCollection('promos').find({
"id": 1,
"$expr": { "$gt": [ "$limit.max" , "$limit.used" ] }
})
Или один $match
этап, если вам действительно нужно использовать агрегат вместо:
db.getCollection('promos').aggregate([
{ "$match": {
"id": 1,
"$expr": { "$gt": [ "$limit.max" , "$limit.used" ] }
}}
])
Вот как работает $expr
, и вы можете «смешать» его с другими обычными операторами запросов на том же этапе запроса или конвейера.
Также см. $gt
для общих примеров использования
Конечно, если у вас даже нет MongoDB 3.6, тогда вместо этого вы используете $redact
:
db.getCollection('promos').aggregate([
{ "$match": { "id": 1 } },
{ "$redact": {
"$cond": {
"if": { "$gt": [ "$limit.max" , "$limit.used" ] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}
])
Или используйте $where
. Работает во всех версиях:
db.getCollection('promos').find({
"id": 1,
"$where": "this.limit.max > this.limit.used"
})