在执行了一些聚合魔法之后,我得到了这个数据:
{ "_id" : "5700edfe03fcdb000347bebb", "size" : 3, "count" : 2 }
{ "_id" : "5700edfe03fcdb000347bebf", "size" : 2, "count" : 2 }
现在,我想消除大小等于计数的所有条目。
所以我运行了这个聚合指令:
match3 = { "$match" : { "size" : { "$ne" : "count"} } }
但它不会消除任何内容并按原样返回两行。
我希望结果只是这一行,因为它是唯一大小不等于计数的行:
{ "_id" : "5700edfe03fcdb000347bebb", "size" : 3, "count" : 2 }
需要向聚合管道添加$redact
阶段:
{ "$redact": {
"$cond": [
{ "$eq": [ "$size", "$count" ] },
"$$PRUNE",
"$$KEEP"
]
}}
您可以使用
$where
运算符
db.collection.find({ $where: "this.size != this.count" })
db.collection.remove({ $where: "this.size != this.count" })
更新:在我被否决后,我决定比较这两种解决方案。两者都使用COLLSCAN
并且都返回相同的结果。所以请启发我我的解决方案有什么问题?:)