即使字段类型不一样,如何检测重复?
{id : 1 , price : 5}
{id : 2 , price : "6"}
{id : 3 , price : "5"}
所以重复是
{id : 1 , price : 5}
{id : 3 , price : "5"}
答案 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
}
}
}