2016-12-26 63 views
2

即使字段類型不相同,我如何檢測重複?MongoDB:字段類型不同時發現重複

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

所以重複是

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

爲什麼你插入'在數字和字符串格式price',插入數字或字符串以避免特徵處理的更好方法。如果您事先知道'價格'將數字或字符串,那麼你可以相應地查詢 – Yogesh

回答

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 } 
     } 
    }] 
) 

$price的聚集$group的其餘計數OCCURENCES並具有一個計數> 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 
     } 
    } 
} 
+0

謝謝,工作正常! – user3134277

+0

我可以使用count()嗎? 我試過不成功....我怎麼能找到我有多少重複? – user3134277

+1

我已經更新了我的帖子與不同的領域重複計數(例如,它會給1,因爲只有「5」這是重複 –