2017-09-26 69 views
1

我有一个蒙戈集合,看起来像这样:MongoDB:如何在mongo集合中找到不同的数组对?

{ "_id" : ObjectId("59ca2d8f17b56667cd0cd50a"), "gps" : [ 2, 1 ] } 
{ "_id" : ObjectId("59ca2da317b56667cd0cd50b"), "gps" : [ 2, 1 ] } 
{ "_id" : ObjectId("59ca2db817b56667cd0cd50c"), "gps" : [ 3, 2 ] } 
{ "_id" : ObjectId("59ca2dc717b56667cd0cd50d"), "gps" : [ 3, 2 ] } 
{ "_id" : ObjectId("59ca2dcf17b56667cd0cd50e"), "gps" : [ 4, 5 ] } 
{ "_id" : ObjectId("59ca2dda17b56667cd0cd50f"), "gps" : [ 5, 7 ] } 

我想筛选出所有重复的GPS对。所以我期望的输出是:

{ "_id" : ObjectId("59ca2d8f17b56667cd0cd50a"), "gps" : [ 2, 1 ] } 
{ "_id" : ObjectId("59ca2db817b56667cd0cd50c"), "gps" : [ 3, 2 ] } 
{ "_id" : ObjectId("59ca2dcf17b56667cd0cd50e"), "gps" : [ 4, 5 ] } 
{ "_id" : ObjectId("59ca2dda17b56667cd0cd50f"), "gps" : [ 5, 7 ] } 

如何做到这一点?

回答

3

如果像robjwilkins提到的那样,您想保留原始ID,您可以使用如下的$第一个函数:

db.collection.aggregate([{$group:{_id:"$gps" ,firstid: { $first: "$_id" }}}]) 
1

为此,您可以用汇总查询:

db.collection.aggregate([{$group:{_id:"$gps"}}]) 

这会给输出,如:

{ "_id" : [ 5, 7 ] } 
{ "_id" : [ 4, 5 ] } 
{ "_id" : [ 3, 2 ] } 
{ "_id" : [ 2, 1 ] } 

,但你将缺少从原始文档中的_id(如果这个问题不知道)

1

如果你想永久删除:

db.yourCollection.find({},{gps:1}) 
    .sort({_id:1}) 
    .forEach(function(doc){ 
     db.yourCollection.remove({_id:{$gt:doc._id}, gps:doc.gps 
     }); 
    } 
) 
相关问题