hot*_*ips 19 mongodb aggregation-framework
我有一个包含两个文档的测试集合:
> db.test.find().pretty()
{ "_id" : ObjectId("510114b46c1a3a0f6e5dd7aa"), "a" : 1, "b" : 2 }
{ "_id" : ObjectId("510114c86c1a3a0f6e5dd7ab"), "a" : 3, "b" : 1 }
Run Code Online (Sandbox Code Playgroud)
使用聚合框架,我想只获取a大于b的文档.$ gt只获取参数中的值而不是字段...
> db.test.aggregate([{"$match":{"$a":{"$gt":"$b"}}}])
{ "result" : [ ], "ok" : 1 } /* don't work*/
Run Code Online (Sandbox Code Playgroud)
你有什么想法吗?
提前致谢
最好的祝福
Sam*_*aye 37
嗯我没有太多测试我会说你可以使用$cmp这个:
http://docs.mongodb.org/manual/reference/aggregation/cmp/#_S_cmp
db.test.aggregate([
{$project: {
// All your other fields here
cmp_value: {$cmp: ['$a', '$b']}
}},
{$match: {cmp_value: {$gt: 0}}}
])
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法,但我没有在我附近安装MongoDB进行测试.
$expr运算符。在 3.6 版中引入,$expr可以构建比较同一文档中的字段的查询表达式。
比较单个文档中的两个字段(直接取自MongoDB Docs 的示例):
考虑具有以下文档的每月预算集合:
{ "_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 }
Run Code Online (Sandbox Code Playgroud)
以下操作用于$expr查找支出金额超过预算的文档:
db.monthlyBudget.find( { $expr: { $gt: [ "$spent" , "$budget" ] } } )
Run Code Online (Sandbox Code Playgroud)
该操作返回以下结果:
{ "_id" : 1, "category" : "food", "budget" : 400, "spent" : 450 }
{ "_id" : 2, "category" : "drinks", "budget" : 100, "spent" : 150 }
{ "_id" : 5, "category" : "travel", "budget" : 200, "spent" : 650 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13994 次 |
| 最近记录: |