簡體   English   中英

從 MongoDB 但 MongoDB db.collection.find() 刪除重復項返回空結果

[英]Removing duplicates from MongoDB but MongoDB db.collection.find() return empty result

如何從 MongoDB 中刪除重復項? 但是 MongoDB db.collection.find() 看起來根本不起作用。

代碼

start_date = "2020-05-00"
end_date = "2020-07-00"

collection.create_index([('text', 'text')])
df = pd.DataFrame(list(collection.find({"$text": 
                                        {"$search": "ACTIVE - ACT 06"},
                                        "datetime": {
                                            "$gte": start_date+"T00:00:00.000Z",
                                            "$lt": end_date+"T00:00:00.000Z"
                                        }},
                                       {"_id":1, "datetime":1,"name":1})))

樣本重復數據。 我想確保每個日期的名稱都是唯一的(忽略時間)。

{
    "datetime": "2020-05-03 06:43:52",
    "name": "ACTIVE - ACT 06"
},
{
    "datetime": "2020-05-03 06:44:01",
    "name": "ACTIVE - ACT 05"
},
{
    "datetime": "2020-05-03 07:43:52",
    "name": "ACTIVE - ACT 06"
},
{
    "datetime": "2020-05-03 07:44:01",
    "name": "ACTIVE - ACT 05"
},
{
    "datetime": "2020-05-03 08:43:52",
    "name": "ACTIVE - ACT 06"
},
{
    "datetime": "2020-05-03 08:44:01",
    "name": "ACTIVE - ACT 05"
}

拆除后。 僅保存較早的記錄。

{
    "datetime": "2020-05-03 06:43:52",
    "name": "ACTIVE - ACT 06"
},
{
    "datetime": "2020-05-03 06:44:01",
    "name": "ACTIVE - ACT 05"
}

您可以像這樣使用聚合框架:

  1. 首先列出重復數據。
  2. 然后,將其一一移除。
db.collection.aggregate([
      {
        $group: {
          _id: "$name",
          dups: {
            $push: "$_id"
          },
          count: {
            $sum: 1
          }
        }
      },
      {
        $match: {
          count: {
            $gt: 1
          }
        }
      }
    ]).forEach(function(doc){
      db.collection.remove({
        _id: {
          $in: doc.dups
        }
      });
    })


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM