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