我有一个包含起始名称的庞大数据集,然后是几个" trip"对于每个起始名称。结构是这样的:
我想基本上删除除了每个起始名称之外的所有行程,因此我最终为每个起始名称添加一个条目。
我尝试了什么:
db.test.aggregate([
{ "$group": {
"_id": "$start",
"dups": { "$push": "$_id" },
"count": { "$sum": 1 }
}},
{ "$match": { "count": { "$gt": 1 } }}
]).forEach(function(doc) {
doc.dups.shift();
db.events.remove({ "_id": {"$in": doc.dups }});
});
db.test.createIndex({"start":1},{unique:true})
然而,这会导致错误:
" ERRMSG" :" E11000重复键错误集合:test2.test index:start_1 dup key:{:\" A \" }"
有没有更好的方法来实现这一目标?
- 编辑:
我首先通过分组/聚合启动来解决它,然后将它们放入新的集合中:
var starts = db.test.aggregate(
{
$group : {
_id : "$start",
duration: { $first: "$duration"}
}
}
);
db.newcollection.insert(starts.toArray());
由于我需要保留的不仅仅是start
字段,我还填写了持续时间。这样,您最终会为每个start
添加一个条目,其中"第一个"持续时间mongoDB确定。如果还需要其他(可能是静态字段),则可以调整此值。