如果两个字段相同,如何排除文档?

时间:2016-06-10 19:49:43

标签: javascript mongodb aggregation-framework

在执行了一些聚合魔术之后,我已经得到了这个数据:

{ "_id" : "5700edfe03fcdb000347bebb", "size" : 3, "count" : 2 }
{ "_id" : "5700edfe03fcdb000347bebf", "size" : 2, "count" : 2 }

现在,我想删除大小等于count的所有条目。

所以我运行了这个聚合指令:

match3 = { "$match" : { "size" : { "$ne" : "count"}  } }

但它并没有消除任何东西,而是按原样返回两条线。

我希望结果只是这一行,因为它是唯一一个大小不等于count的行:

{ "_id" : "5700edfe03fcdb000347bebb", "size" : 3, "count" : 2 }

2 个答案:

答案 0 :(得分:1)

您需要在汇总管道中添加$redact阶段:

{ "$redact": {
    "$cond": [ 
        { "$eq": [ "$size", "$count" ] },
        "$$PRUNE",
        "$$KEEP"
    ]
}}

答案 1 :(得分:-1)

您可以使用$where运算符

db.collection.find({ $where: "this.size != this.count" })
db.collection.remove({ $where: "this.size != this.count" })

更新: 在我投票后,我决定比较两种解决方案。 两者都使用COLLSCAN并且都返回相同的结果。 那么请告诉我我的解决方案有什么问题? :)