删除MongoDB中

时间:2017-05-01 10:08:44

标签: mongodb mongodb-query aggregation-framework

我有一个包含起始名称的庞大数据集,然后是几个" trip"对于每个起始名称。结构是这样的:

enter image description here

我想基本上删除除了每个起始名称之外的所有行程,因此我最终为每个起始名称添加一个条目。

我尝试了什么:

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确定。如果还需要其他(可能是静态字段),则可以调整此值。

0 个答案:

没有答案