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



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

{ "_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并且都返回相同的结果。所以请启发我我的解决方案有什么问题?:)

最新更新