2017-09-26 101 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 
     }); 
    } 
) 
相關問題