gpt4 book ai didi

mongodb - 如何在mongodb中删除具有特定条件的重复项?

转载 作者:可可西里 更新时间:2023-11-01 10:00:36 26 4
gpt4 key购买 nike

例如,我的收藏中有以下文档:

{
"_id" : "GuqXmAkkARqhBDqhy",
"beatmapset_id" : "342537",
"version" : "MX",
"diff_approach" : "5",
"artist" : "Yousei Teikoku",
"title" : "Kokou no Sousei",
"difficultyrating" : "3.5552737712860107"
}
{
"_id" : "oHLT7KqsB7bztBGvu",
"beatmapset_id" : "342537",
"version" : "HD",
"diff_approach" : "5",
"artist" : "Yousei Teikoku",
"title" : "Kokou no Sousei",
"difficultyrating" : "2.7515676021575928"
}
{
"_id" : "GbotZfrPEwW69FkGD",
"beatmapset_id" : "342537",
"version" : "NM",
"diff_approach" : "5",
"artist" : "Yousei Teikoku",
"title" : "Kokou no Sousei",
"difficultyrating" : "0"
}

这些文档具有相同的 key beatmapset_id我想删除所有重复项,但保留 difficultyrating 最高的文档。

我尝试了 db.collection.ensureIndex({beatmapset_id: 1}, {unique: true, dropDups: true}) 但它留下了一个随机文档,我想要上面的条件。

我该怎么做?

最佳答案

首先您需要更新您的文档并将difficultyratingbeatmapset_id 更改为 float 。为此,您需要使用 .forEach 遍历每个文档。方法并使用 "Bulk" 更新每个文档最高效率的操作..

var bulk = db.collection.initializeOrderedBulkOp();
var count = 0;
db.collection.find().forEach(function(doc) {
bulk.find({ '_id': doc._id }).update({
'$set': {
'beatmapset_id': parseFloat(doc.beatmapset_id),
'difficultyrating': parseFloat(doc.difficultyrating)
}
});
count++;
if(count % 100 == 0) {
bulk.execute();
bulk = db.collection.initializeOrderedBulkOp();
}
})

if(count > 0) {
bulk.execute();
}

现在和从 MongoDB 2.6 开始“弃用”索引创建的“dropDups”语法并在 MongoDB 3.0 中删除。这就是删除重复项的方法。

这里的主要思想是首先按照difficultyrating降序排列你的文档。

bulk  = db.collection.initializeUnorderedBulkOp();
count = 0;
db.collection.aggregate([
{ '$sort': { 'difficultyrating': -1 }},
{ '$group': { '_id': '$beatmapset_id', 'ids': { '$push': '$_id' }, 'count': { '$sum': 1 }}},
{ '$match': { 'count': { '$gt': 1 }}}
]).forEach(function(doc) {
doc.ids.shift();
bulk.find({'_id': { '$in': doc.ids }}).remove();
count++;
if(count === 100) {
bulk.execute();
bulk = db.collection.initializeUnorderedBulkOp();
}
})

if(count !== 0) {
bulk.execute();
}

answer覆盖主题以获取更多详细信息。

关于mongodb - 如何在mongodb中删除具有特定条件的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32894443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com