如何删除重复的嵌入式文档

刺眼的

我的用户集合包含许多子文档列表。模式是这样的:

   {
    _id: ObjectId(),
    name: aaa,
    age: 20,
    transactions:[
        {
         trans_id: 1,
         product: mobile,
         price: 30,
        },
        {
         trans_id: 2,
         product: tv,
         price: 10
        },
        ...]
    ...
   }

所以我有一个疑问。trans_idtransactions列表上的所有产品独特,但它可能是可能的,我可能会用同样的再次复制相同的事务trans_id(由于恶劣的ETL程序)。现在,我想删除那些重复的子文档。我索引trans_id认为不是unique我读到有关dropDups期权的信息。但是它将删除数据库中存在的特定重复项,还是删除整个文档(我绝对不希望这样做)。如果没有怎么办呢?

PS:我正在使用MongoDB 2.6.6版本。

尼尔·伦恩

对于我们在这里看到的所有情况,最近的情况是,现在您需要一种定义数组中“不同”项目的方法,其中某些项目实际上是数组中其他项目的“精确副本”。

最好的情况是在循环的集合操作中$addToSet$each修饰符一起使用理想情况下,您可以使用Bulk Operations API来利用减少的流量:

var bulk = db.collection.initializeOrderedBulkOperation();
var count = 0;

// Read the docs
db.collection.find({}).forEach(function(doc) {
    // Blank the array
    bulk.find({ "_id": doc.id })
        .updateOne({ "$set": { "transactions": [] } });
    // Resend as a "set"
    bulk.find({ "_id": doc.id })
        .updateOne({ 
            "$addToSet": { 
                "trasactions": { "$each": doc.transactions }
            }
        });
    count++;

    // Execute once every 500 statements ( actually 1000 )
    if ( count % 500 == 0 ) {
        bulk.execute()
        bulk = db.collection.initializeOrderedBulkOperation();
    }
});

// If a remainder then execute the remaining stack
if ( count % 500 != 0 )
    bulk.execute();

因此,只要“重复”的内容“完全相同”,则此方法将起作用。如果实际上唯一的“重复项”是“ trans_id”字段,则您需要一种完全不同的方法,因为没有“整个文档”被“重复项”,这意味着您需要更多的逻辑来执行此操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Mongoengine删除嵌入式文档?

来自分类Dev

如何在具有15万个嵌入式字体的PDF文档中删除重复的字体?

来自分类Dev

如何验证mongodb嵌入式文档

来自分类Dev

如何测试Mongoid的嵌入式文档?

来自分类Dev

如何对嵌入式文档进行排序?

来自分类Dev

如何在mongodb中使用node.js删除嵌入式(嵌套)文档

来自分类Dev

如何检索和删除嵌入式文档Spring Data MongoDB

来自分类Dev

从Mongo Engine中的ListfField删除嵌入式文档

来自分类Dev

从mongodb中的嵌入式文档中删除元素

来自分类Dev

MongoDB删除3级嵌入式文档

来自分类Dev

Mongoid嵌入式文档属于_嵌入式文档

来自分类Dev

如何在嵌入式数组mongodb中查询嵌入式文档

来自分类Dev

如何在OrientDB中插入嵌入式文档

来自分类Dev

如何在嵌入式文档数组上使用$ geoNear?

来自分类Dev

如何强制iframe调整大小以适合嵌入式文档?

来自分类Dev

MongoClient:如何设置嵌入式文档的值

来自分类Dev

猫鼬:如何更新子嵌入式文档数组?

来自分类Dev

如何根据其ID更新嵌入式文档?

来自分类Dev

如何选择嵌入式文档列表作为根元素

来自分类Dev

如何在Meteor中循环浏览嵌入式文档

来自分类Dev

如何对嵌入式文档进行汇总查询?

来自分类Dev

如何从ReactiveMongo生成嵌入式文档的ObjectIds

来自分类Dev

如何在 MongoDb 中查询嵌入式文档?

来自分类Dev

如何从嵌入式视频中完全删除youtube品牌?

来自分类Dev

如何从嵌入式Jetty URL中删除尾部斜杠?

来自分类Dev

如何删除猫鼬中的嵌入式方案文件?

来自分类Dev

如何使用JQuery或JavaScript删除嵌入式音频

来自分类Dev

如何删除这个丑陋的边框创建的嵌入式阴影?

来自分类Dev

mongodb汇总嵌入式文档值

Related 相关文章

  1. 1

    如何使用Mongoengine删除嵌入式文档?

  2. 2

    如何在具有15万个嵌入式字体的PDF文档中删除重复的字体?

  3. 3

    如何验证mongodb嵌入式文档

  4. 4

    如何测试Mongoid的嵌入式文档?

  5. 5

    如何对嵌入式文档进行排序?

  6. 6

    如何在mongodb中使用node.js删除嵌入式(嵌套)文档

  7. 7

    如何检索和删除嵌入式文档Spring Data MongoDB

  8. 8

    从Mongo Engine中的ListfField删除嵌入式文档

  9. 9

    从mongodb中的嵌入式文档中删除元素

  10. 10

    MongoDB删除3级嵌入式文档

  11. 11

    Mongoid嵌入式文档属于_嵌入式文档

  12. 12

    如何在嵌入式数组mongodb中查询嵌入式文档

  13. 13

    如何在OrientDB中插入嵌入式文档

  14. 14

    如何在嵌入式文档数组上使用$ geoNear?

  15. 15

    如何强制iframe调整大小以适合嵌入式文档?

  16. 16

    MongoClient:如何设置嵌入式文档的值

  17. 17

    猫鼬:如何更新子嵌入式文档数组?

  18. 18

    如何根据其ID更新嵌入式文档?

  19. 19

    如何选择嵌入式文档列表作为根元素

  20. 20

    如何在Meteor中循环浏览嵌入式文档

  21. 21

    如何对嵌入式文档进行汇总查询?

  22. 22

    如何从ReactiveMongo生成嵌入式文档的ObjectIds

  23. 23

    如何在 MongoDb 中查询嵌入式文档?

  24. 24

    如何从嵌入式视频中完全删除youtube品牌?

  25. 25

    如何从嵌入式Jetty URL中删除尾部斜杠?

  26. 26

    如何删除猫鼬中的嵌入式方案文件?

  27. 27

    如何使用JQuery或JavaScript删除嵌入式音频

  28. 28

    如何删除这个丑陋的边框创建的嵌入式阴影?

  29. 29

    mongodb汇总嵌入式文档值

热门标签

归档