使用$expr
操作符。
自3.6版本引入,$expr
可以构建查询表达式,用于比较同一文档中的字段。
比较单个文档中的两个字段(示例直接取自MongoDB文档):
考虑一个monthlyBudget集合,其中包含以下文档:
{ "_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 }
a
,而不是$a
,即db.test.aggregate([{"$match":{"a":{"$gt":"$b"}}}])
。 - Quolonel Questionsb
的值,它将使用$b
作为比较的右侧。可以通过执行db.test.aggregate([{"$match":{"a":{"$eq":"$a"}}}])
来测试。将返回零个结果。 - Pauldb.test.find( {"$expr": {"$gt": ["$a", "$b"]}})
,并且可以通过聚合操作使用db.test.aggregate( {"$match":{"$expr": {"$gt": ["$a", "$b"]}}})
。 - s7vr