当前位置: 首页 > 知识库问答 >
问题:

MongoDB:有条件地删除重复项

严亦
2023-03-14

我有一个文档集合,如下所示:

{
    "word": "foo",
    "likes": 10,
    "dislikes": 1,
},
{
    "word": "foo",
    "likes": 5,
    "dislikes": 9,
},
db.entries.ensureIndex({'word' : 1}, {unique : true, dropDups : true})

编辑:此清理是一次性事件,性能并不重要。

共有1个答案

戚阳
2023-03-14
db.entries.aggregate(
            [
              {$group:{_id:'$word',
                       entries:{'$push':
                                   {score:{ $divide: [ "$$ROOT.likes", "$$ROOT.dislikes" ]},
                                    _id:"$$ROOT._id"}
                                   }
                               }
                       }
             ,{$unwind: '$entries'}, 
              {$sort: {'entries.score': -1}} ,
              {$group: {_id: '$_id', 'entries': {$push: '$$ROOT.entries'}}}
           ])

当不喜欢为0时处理这个案子。也许您可以使用$$root.dislikes+1我不知道Javascript CLI中的输出是如何获取的。我假设docs是输出。

var duplicate_ids = [];
docs.forEach(function(doc){
    for(var i=1;i<doc.entries.length;i++){
       duplicate_ids.push(doc.entres._id);
     }
});
db.entries.remove({_id:{'$in':duplicate_ids}})

这应该能解决你的问题。

 类似资料:
  • 我有两张桌子——桌子1和桌子2。 它们有相同的列——Col1、Col2、Col3、Col4(整数)。 我将Table_2行插入Table_1。 表_1和表_2有一些基于Col1和Col2的重复值。我需要保留表_2的值,并删除表_1的重复值。 例如: 我尝试了以下方法-

  • 我想从df1中删除某些行。我确实以这种方式编写了条件,并向我显示了要删除的确切行。但是,当我尝试对此数据应用drop时,它不起作用: 当我使用 我可以看到我要删除的数据,这意味着代码有效。然而,当我尝试删除这些行时,它不起作用 我也试过了 但它要么表明: 或 如何删除在(待删除)数据框中指定的这些行? 非常感谢。

  • 我有一个包含列和的df。我正在尝试仅为每个用户的值行后的值删除重复项 最终df

  • 问题内容: 我正在尝试使sql删除所有重复的标题,但必须在以下情况下删除重复的标题: 必须只删除具有相同 object_id的* 重复项 * 必须仅保留最新记录(最大的 topic_id )(topic_id是每个主题AI的唯一ID) 到目前为止,我已经做到了(使用select进行测试…) 但是不符合条件。 我正在使用mysql。 问题答案: 在中,您无法为子查询中的操作指定目标表(除非您将目标表

  • 然而,当我运行foreach循环时,它运行了几分钟就崩溃了 最初的数据库mydb有0.173GB,现在是0.368GB 你知道出什么问题了吗? 所以这次看起来很管用,但为什么'mydb'变大了呢?

  • 让我们假设我的数据frame如下所示: 我有一个的列表,我想从Dataframe中删除它们。该列表超过200个长度,因此多个筛选器太麻烦了。 是否可以通过传递的列表来进行筛选?

  • 请注意,在转向您之前,我已经浏览了各种帖子。事实上,我尝试实现中提供的解决方案:基于“notin”条件从数据帧中删除行 我的问题如下。让我们假设我有一个巨大的数据帧,我想删除重复的数据帧。我很清楚我可以使用drop_duplicates,因为这是最快的最简单的方法。然而,我们的老师希望我们创建一个包含重复项ID的列表,然后根据这些值是否包含在上述列表中删除它们。 现在,让我们看看输出: 因此,我得

  • 问题内容: 我想从下表中删除多个重复的键: 希望它像 我正在使用mysql。这是可能的吗?我不能使用 查询来进行唯一的输入,因为我希望将这些重复的输入输入到表中。 问题答案: 一种方法是使用将表联接到子查询上。子查询得到最低为每。当记录在子查询上不匹配时,仅表示它没有匹配的记录并且可以安全地删除。 SQLFiddle演示 但是,如果的记录可以具有不同的名称,则您需要在子句中包括它们,否则将仅保留最