2016-07-15 90 views
0

我试图找到一种方法来查找和删除子文档数组中相同字段的重复对象。如何在MongoDB中的子文档数组中找到重复的字段

基本上我的收藏有这个模式。

[{ 
    "_id": ObjectId("578953db976cea724bbdbb60"), 
    "units": [{ 
    "description": "a1" 
    }, { 
    "description": "b1" 
    }, { 
    "description": "a1" 
    }, { 
    "description": "c1" 
    }] 
}, { 
    "_id": ObjectId("578953db976cea724bbdbb61"), 
    "units": [{ 
    "description": "a2" 
    }, { 
    "description": "b2" 
    }, { 
    "description": "a2" 
    }, { 
    "description": "c2" 
    }] 
}] 

我只是想找到并删除重复字段与相同的描述。

所以对于第一,我需要确定分别为 “A1” 和A2"

感谢

更新(输出应该是):

[{ 
 
    "_id": ObjectId("578953db976cea724bbdbb60"), 
 
    "units": [{ 
 
    "description": "a1" 
 
    }, { 
 
    "description": "b1" 
 
    }, { 
 
    "description": "c1" 
 
    }] 
 
}, { 
 
    "_id": ObjectId("578953db976cea724bbdbb61"), 
 
    "units": [{ 
 
    "description": "a2" 
 
    }, { 
 
    "description": "b2" 
 
    }, { 
 
    "description": "c2" 
 
    }] 
 
}]

+0

有一定的模糊性,以你想要达到的目标。从文档中删除相同的对象时,应从中删除哪个文档?如果它们都来自两者,那将很容易。 –

+0

删除重复项后的预期输出是什么? – styvane

+0

@TanKimLoong是的我想从两个数组中删除重复的数据。 –

回答

0

使用JavaScript

db.COLLECTION.find().forEach(function(element){ 
    var descriptions = element.units.map(function(unit){return unit.description;}) 
    element.units = element.units.filter(function(value, index, array){ 
     return descriptions.indexOf(value) == index; 
    }) 
    db.save(element); 
}) 
0

一个简单的$setUnion应该给你你想要的。

db.collection.aggregate([ {$project : {_id : "$_id", units : {$setUnion: ["$units"]}}} ])

相关问题