在我的 PostgresDB 中,我正在使用另一個表執行洗掉操作,如下所示。
DELETE FROM user_records
USING to_delete_records
WHERE user_records.record_id = to_delete_records.record_id
user_recordstable 包含大約 2 億條記錄,而to_delete_recordstable 包含大約 5-1000 萬條記錄。每天to_delete_records表都會更新一組新的記錄,并且必須執行上述洗掉操作。(類似于洗掉,插入操作(大約5-1000萬條記錄)也會發生,因此總資料集user_records仍然在2億左右)
現在我用 MongoDB 替換 PostgresDB,下面是我用來洗掉user_records集合中記錄的腳本:
db.to_delete_records.find({}, {_id: 0}).forEach(function(doc){
db.user_records.deleteOne({record_id:doc.record_id});
});
由于這是一個回圈運行,似乎效率低下。
有沒有更好的方法來洗掉使用 Mongo 中的另一個集合的集合的檔案?
uj5u.com熱心網友回復:
如果record_id在這兩個獨特的領域user_records和to_delete_records,你可以,如果你沒有這樣做,建立該領域的唯一索引的每個集合。
db.user_records.createIndex({record_id: 1}, {unique:true});
db.to_delete_records.createIndex({record_id: 1}, {unique:true});
之后,您可以使用$merge陳述句向toDelete集合中添加輔助欄位user_records,根據中的內容to_delete_records
db.to_delete_records.aggregate([
{
"$merge": {
"into": "user_records",
"on": "record_id",
"whenMatched": [
{
$set: {
"toDelete": true
}
}
]
}
}
])
最后,運行deleteMany上user_records
db.user_records.deleteMany({toDelete: true});
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357782.html
上一篇:如何在Mongo中按時間間隔分組
