我有一个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 ] }
怎么做?
答案 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
});
}
)