在Mongodb中获取唯一文档?

在Mongodb中获取唯一文档?

问题描述:

样本数据:在Mongodb中获取唯一文档?

{"_id" : ObjectId("58bd10e4ff1743c527754160"), 
     "data" : [ 
      { 
       "No" : "70", 
       "Type" : "82", 
       "Device" : "01", 
       "timestamp" : "2017-03-06 13:00:32" 
       }] 
    }, 
    {"_id" : ObjectId("58bd10sdfe4ff1743csdf0754"), 
     "data" : [ 
      { 
       "No" : "75", 
       "Type" : "22", 
       "Device" : "02", 
       "timestamp" : "2017-03-06 13:00:32" 
       }] 
    } 

我有有相同的时间戳一些文件,所以我想找到只时间戳的基础上独一无二的文件。 我已经做了不同的时间戳,但我想要完整的文档。

想要的输出: 如果有相同的时间戳,我只想要一个文档。

You will only get one output if you run this query. 

db.getCollection('tests').aggregate([{$match:{"data.timestamp":"2017-03-06 13:00:32"}},{$limit:1}]) 
+0

thnaks,现在我想删除重复的一个。 –

+0

使用相同的聚合函数来获取一个结果文档,然后使用remove函数删除该文档。@ TB.M –

解决方案1:

db.your_collection.aggregate([ 
    { 
     $group:{ 
     _id:"$data.timestamp", 
     data:{ 
      $first:"$data" 
     } 
     } 

} ])

这会给你以下几点:

{ "_id" : [ "2017-03-06 13:00:32" ], "data" : [ { "No" : "70", "Type" : "82", "Device" : "01", "timestamp" : "2017-03-06 13:00:32" }, { "No" : "10", "Type" : "20", "Device" : "01", "timestamp" : "2018-02-04 10:00:00" } ] } 

解决方案2:

db.your_collection.aggregate([ 
    { $unwind : '$data'}, 
    { $group : { 
     _id : '$data.timestamp', 
     'No': { $first : '$data.No'}, 
     'Type': { $first : '$data.Type'}, 
     'Device': { $first : '$data.Device'}, 
     'timestamp': { $first : '$data.timestamp'}, 
     } 
    } 
]); 

这会给你以下几点:

[ 
    { "_id" : "2017-03-06 13:00:32", "No" : "70", "Type" : "82", "Device" : "01", "timestamp" : "2017-03-06 13:00:32" }, 
    { "_id" : "2018-02-04 10:00:00", "No" : "10", "Type" : "20", "Device" : "01", "timestamp" : "2018-02-04 10:00:00" }, 
] 
+0

非常感谢,并且不管重复如何删除它? –