MongoDB:当字段类型不相同时查找重复项

时间:2016-12-26 18:42:01

标签: mongodb casting duplicates mongodb-query

即使字段类型不一样,如何检测重复?

{id : 1 , price : 5}
{id : 2 , price : "6"}
{id : 3 , price : "5"}

所以重复是

{id : 1 , price : 5}
{id : 3 , price : "5"}

1 个答案:

答案 0 :(得分:1)

您可以使用$substr进行从索引0到-1的字符串转换(字符串的其余部分)。 :

db.duplicates.aggregate(
    [{
        "$project": {
            id: 1,
            price: { $substr: ["$price", 0, -1] }
        }
    }, {
        "$group": {
            "_id": "$price",
            "count": { "$sum": 1 },
            "item": { $push: "$$ROOT" }
        }
    }, {
        "$match": {
            "_id": { "$ne": null },
            "count": { "$gt": 1 }
        }
    }]
)

$group的剩余聚合$price来计算出现次数和匹配项数> 1(重复)。在item中,您拥有重复的初始项:

{ "_id" : "5", "count" : 2, "item" : [ { "_id" : ObjectId("58616dc177b68a6c54252bc8"), "id" : 1, "price" : "5" }, { "_id" : ObjectId("58616dc177b68a6c54252bca"), "id" : 3, "price" : "5" } ] }

要计算重复的字段的数量,请添加:

{
    "$group": {
        "_id": null,
        "totalCount": {
            "$sum": 1
        }
    }
}