【发布时间】:2013-01-24 12:24:30
【问题描述】:
我有一个包含两个文档的测试集合:
> db.test.find().pretty()
{ "_id" : ObjectId("510114b46c1a3a0f6e5dd7aa"), "a" : 1, "b" : 2 }
{ "_id" : ObjectId("510114c86c1a3a0f6e5dd7ab"), "a" : 3, "b" : 1 }
使用聚合框架,我只想获取 a 大于 b 的文档。 $gt 只获取参数而不是字段中的值...
> db.test.aggregate([{"$match":{"$a":{"$gt":"$b"}}}])
{ "result" : [ ], "ok" : 1 } /* don't work*/
你有什么想法吗?
提前致谢
最好的问候
【问题讨论】:
-
您的聚合查询似乎出错了。您希望匹配的字段应指定为
a,而不是$a,即db.test.aggregate([{"$match":{"a":{"$gt":"$b"}}}]) -
@QuolonelQuestions,这仍然行不通,MongoDB 不会使用字段
b的值,它将使用$b作为比较的右侧。这可以通过执行db.test.aggregate([{"$match":{"a":{"$eq":"$a"}}}])来测试。将返回零个结果。 -
在3.6的正则查询中可以使用聚合表达式。像
db.test.find( {"$expr": {"$gt": ["$a", "$b"]}})和聚合通过db.test.aggregate( {"$match":{"$expr": {"$gt": ["$a", "$b"]}}})
标签: mongodb aggregation-framework