在执行了一些聚合魔术之后,我已经得到了这个数据:
{ "_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 }
答案 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
并且都返回相同的结果。
那么请告诉我我的解决方案有什么问题? :)