MongoDB:查找集合中日期范围之间的唯一文档

MongoDB:查找集合中日期范围之间的唯一文档,mongodb,Mongodb,我不知道如何执行这项任务 这里是文档结构 name: date_created: val: 我需要找出2011年1月至2011年10月期间创建的唯一文档 我知道我可以找出两个日期范围之间的文档数,如下所示 db.collection.find({'date_created': {'$gte': '2011-01-01', '$lt': '2011-10-30'}}); 我能清楚地知道 db.runCommand({'distinct': 'collection', 'key': 'nam

我不知道如何执行这项任务

这里是文档结构

name:
date_created:
val:
我需要找出2011年1月至2011年10月期间创建的唯一文档

我知道我可以找出两个日期范围之间的文档数,如下所示

db.collection.find({'date_created': {'$gte': '2011-01-01', '$lt': '2011-10-30'}});  
我能清楚地知道

db.runCommand({'distinct': 'collection', 'key': 'name'})   
问题

问题是集合中有重复的文档需要删除

我如何回答这个问题

find out unique documents created between January 2011 and October 2011 where uniqueness is based on 'name' key
更新

@Sergio ansewer非常完美,在运行查询之后,我得到了以下结果,可以看到
输出编号
,这意味着重复项被删除

{
    "result" : "temp_collection",
    "timeMillis" : 1509717,
    "counts" : {
        "input" : 592364,
        "emit" : 592364,
        "output" : 380827
    },
    "ok" : 1
}

似乎可以用map-reduce解决这个问题。像这样的事情应该会有帮助

var map = function() {
  emit(this.name, this);
}

var reduce = function(key, vals) {
  // vals contains all documents for this key (name). Just pick one.
  return vals[0];
}

db.runCommand({
  mapreduce: 'collection',
  map: map,
  reduce: reduce,
  query: {'date_created': {'$gte': '2011-01-01', '$lt': '2011-10-30'}},
  out: 'temp_collection'
});
此命令返回后,您应该在
temp\u集合中拥有您的唯一文档

,因为在MongoDB 2.1中添加了,您还可以执行以下操作:

db.collection.aggregate([ 
    {$match: {'date_created': {'$gte': '2011-01-01', '$lt': '2011-10-30'}}}, 
    {$sort: {name: 1}}, 
    {$group: {
        _id: '$name', 
        val: {$first: '$val'}
    }}
])

你想要唯一的文档,还是范围内的唯一文档数?我想要唯一的文档,抱歉混淆,我更改了描述这太棒了,当我完成所有事情后,我得到了答案,非常感谢@Sergio