在Mongodb中获取唯一文档?

时间:2017-05-09 12:03:20

标签: mongodb unique-key

示例数据:

    {"_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"
                }]
   }

我有一些文档具有相同的时间戳,所以我想在时间戳的基础上找到唯一的文档。 我已经完成了时间戳的不同,但我想要完整的文档。

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

2 个答案:

答案 0 :(得分:1)

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}])

答案 1 :(得分:1)

解决方案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" },
]