MongoDB:如何在mongo集合中找到不同的数组对?

时间:2017-09-26 10:46:02

标签: 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 个答案:

答案 0 :(得分:3)

如果正如robjwilkins提到的那样,你想保留原始id,你可以使用$ first函数,如下所示:

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

答案 1 :(得分:1)

您可以使用汇总查询执行此操作:

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

这将输出如下:

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

但你会遗漏原始文件中的_id(不确定这对你来说是否重要?)

答案 2 :(得分:1)

如果您想永久删除

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