Используйте оператор $expr
.
В версии 3.6 $expr
можно создавать выражения запросов, которые сравнивают поля из одного и того же документа.
Сравните два поля из одного документа (пример взят непосредственно из Документы MongoDB):
Рассмотрим ежемесячный сборник бюджета со следующими документами:
{ "_id" : 1, "category" : "food", "budget": 400, "spent": 450 }
{ "_id" : 2, "category" : "drinks", "budget": 100, "spent": 150 }
{ "_id" : 3, "category" : "clothes", "budget": 100, "spent": 50 }
{ "_id" : 4, "category" : "misc", "budget": 500, "spent": 300 }
{ "_id" : 5, "category" : "travel", "budget": 200, "spent": 650 }
Следующая операция использует $expr
для поиска документов, в которых потраченная сумма превышает бюджет:
db.monthlyBudget.find( { $expr: { $gt: [ "$spent" , "$budget" ] } } )
Операция возвращает следующие результаты:
{ "_id" : 1, "category" : "food", "budget" : 400, "spent" : 450 }
{ "_id" : 2, "category" : "drinks", "budget" : 100, "spent" : 150 }
{ "_id" : 5, "category" : "travel", "budget" : 200, "spent" : 650 }
person
Govind Rai
schedule
22.06.2019
a
, а не$a
, т.е.db.test.aggregate([{"$match":{"a":{"$gt":"$b"}}}])
- person Quolonel Questions   schedule 10.02.2016b
, он будет использовать$b
как правую часть сравнения. Это можно проверить, выполнивdb.test.aggregate([{"$match":{"a":{"$eq":"$a"}}}])
. Нулевые результаты будут возвращены. - person Paul   schedule 07.02.2017db.test.find( {"$expr": {"$gt": ["$a", "$b"]}})
и в совокупности черезdb.test.aggregate( {"$match":{"$expr": {"$gt": ["$a", "$b"]}}})
- person s7vr   schedule 14.12.2017