我如何从数组中删除重复的项目(复杂对象)

新自行车

在每个文件中

records是包含许多重复的对象的阵列。

并且buy_items其中还包含许多重复项。

如何清除重复的物品?

原始文件

{
  "_id": "0005d116qwwewdq82a1b84f148fa6027d429f3e",
  "records": [
    {
      "DATE": new Date("1996-02-08T08:00:00+0800"),
      "buy_items": [
        "5210 ",
        "5210 ",
        "5210 "
      ]
    },
    {
      "DATE": new Date("1996-02-08T08:00:00+0800"),
      "buy_items": [
        "5210 ",
        "5210 ",
        "5210 "
      ]
    }
    {
      "DATE": new Date("2012-12-08T08:00:00+0800"),
      "buy_items": [
        "5210 ",
        "1234 ",
        " "
      ]
    }        
    ]
}

预期产量

{
  "_id": "0005d116qwwewdq82a1b84f148fa6027d429f3e",
  "records": [
    {
      "DATE": new Date("1996-02-08T08:00:00+0800"),
      "buy_items": [
        "5210 "
      ]
    },
    {
      "DATE": new Date("2012-12-08T08:00:00+0800"),
      "buy_items": [
        "5210 ",
        "1234 ",
        " "
      ]
    }    
    ]
}

使用Michaels解决方案时,输出可能如下所示

{
  "_id": "0005d116qwwewdq82a1b84f148fa6027d429f3e",
  "records": [
    "date": new Date("1996-02-08T08:00:00+0800"),
      "buy_items": [
        "5210 "
        "1234 ",
        " "
      ]
    ]
}
苯乙烯

您可以使用聚合框架删除重复的对象

db.collection.aggregate(
    [
        { $unwind: "$records" }, 
        { $unwind: "$records.buy_items" }, 
        { $group: { "_id": {id: "$_id", date: "$records.DATE" }, buy_items: { $addToSet: "$records.buy_items" }}}, 
        { $group: {"_id": "$_id.id", records: { $push: {"date": "$_id.date", "buy_items": "$buy_items" }}}}, { $sort: { "records.0.date": 1 }} ,
        { $out: "collection" }
    ]
)

$out运营商让你写你的聚合结果在指定的集合或替换你现有的集合。


使用“批量”操作甚至更好

var bulk = bulk = db.collection.initializeOrderedBulkOp(),
    count = 0;

db.collection.aggregate([
    { "$unwind": "$records" }, 
    { "$project": { 
        "date": "$records.DATE", 
        "buy_items": { "$setIntersection": "$records.buy_items" }
    }}, 
    { "$unwind": "$buy_items" }, 
    { "$group": { 
        "_id": { "id": "$_id", "date": "$date" }, 
        "buy_items": { "$addToSet": "$buy_items" }
    }},
    { "$group": { 
        "_id": "$_id.id", 
        "records": { "$push": { 
            "date": "$_id.date", 
            "buy_items": "$buy_items" 
        }}
    }}
]).forEach(function(doc) { 
       bulk.find({"_id": doc._id}).updateOne({
       "$set": { "records": doc.records }
       }); 
       count++; 
       if (count % 500 == 0) {   
           bulk.execute();    
           bulk = db.collection.initializeOrderedBulkOp(); 
       } 
})

if (count % 500 != 0)
    bulk.execute();

结果:

{
    "_id" : "0005d116qwwewdq82a1b84f148fa6027d429f3e",
    "records" : [
            {
                    "date" : ISODate("2012-12-08T00:00:00Z"),
                    "buy_items" : [
                            " ",
                            "1234 ",
                            "5210 "
                    ]
            },
            {
                    "date" : ISODate("1996-02-08T00:00:00Z"),
                    "buy_items" : [
                            "5210 "
                    ]
            }
    ]
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从对象数组中删除项目?

来自分类Dev

我们如何从对象数组中删除重复的子值

来自分类Dev

如何从对象数组中删除所有重复对象?

来自分类Dev

从数组中删除重复对象

来自分类Dev

如何基于javascript中的条件从数组中删除重复的对象

来自分类Dev

如何删除数组对象中数组内部的项目?javascript

来自分类Dev

如何使用哈希集从json数组中删除重复的对象?

来自分类Dev

如何删除和计算对象数组中的重复项?- Javascript

来自分类Dev

如何从对象数组中删除重复记录?

来自分类Dev

如何在React中删除对象数组中的多个项目?

来自分类Dev

如何从我的结构体数组中删除重复项?

来自分类Dev

如何从数组列表对象中添加和删除项目

来自分类Dev

如何改善以下程序“从数组中删除重复项”的时间复杂度?

来自分类Dev

从Php中的数组中删除重复的对象

来自分类Dev

在SQL Server中检查(并删除)复杂对象重复项

来自分类Dev

如何从嵌套在数组对象内部的数组中删除重复的对象值?

来自分类Dev

PHP从数组中删除重复的对象

来自分类Dev

使用JavaScript从数组中删除重复的对象

来自分类Dev

删除对象数组Javascript中的重复项

来自分类Dev

从对象数组中删除重复项

来自分类Dev

Javascript从对象数组中删除重复的值

来自分类Dev

从JSON数组中删除重复对象

来自分类Dev

javascript从对象数组中删除重复项

来自分类Dev

Javascript从对象数组中删除重复项

来自分类Dev

从对象数组中删除重复项

来自分类Dev

从多维对象数组[,]中删除重复的行?

来自分类Dev

节点:从数组中删除重复的对象

来自分类Dev

从对象的多维数组中删除重复项

来自分类Dev

如何从数组中删除项目

Related 相关文章

  1. 1

    如何从对象数组中删除项目?

  2. 2

    我们如何从对象数组中删除重复的子值

  3. 3

    如何从对象数组中删除所有重复对象?

  4. 4

    从数组中删除重复对象

  5. 5

    如何基于javascript中的条件从数组中删除重复的对象

  6. 6

    如何删除数组对象中数组内部的项目?javascript

  7. 7

    如何使用哈希集从json数组中删除重复的对象?

  8. 8

    如何删除和计算对象数组中的重复项?- Javascript

  9. 9

    如何从对象数组中删除重复记录?

  10. 10

    如何在React中删除对象数组中的多个项目?

  11. 11

    如何从我的结构体数组中删除重复项?

  12. 12

    如何从数组列表对象中添加和删除项目

  13. 13

    如何改善以下程序“从数组中删除重复项”的时间复杂度?

  14. 14

    从Php中的数组中删除重复的对象

  15. 15

    在SQL Server中检查(并删除)复杂对象重复项

  16. 16

    如何从嵌套在数组对象内部的数组中删除重复的对象值?

  17. 17

    PHP从数组中删除重复的对象

  18. 18

    使用JavaScript从数组中删除重复的对象

  19. 19

    删除对象数组Javascript中的重复项

  20. 20

    从对象数组中删除重复项

  21. 21

    Javascript从对象数组中删除重复的值

  22. 22

    从JSON数组中删除重复对象

  23. 23

    javascript从对象数组中删除重复项

  24. 24

    Javascript从对象数组中删除重复项

  25. 25

    从对象数组中删除重复项

  26. 26

    从多维对象数组[,]中删除重复的行?

  27. 27

    节点:从数组中删除重复的对象

  28. 28

    从对象的多维数组中删除重复项

  29. 29

    如何从数组中删除项目

热门标签

归档