删除同一对象的多个出现

时间:2015-11-10 10:54:52

标签: mongodb mongodb-query

在我们的收藏中,有如下结构:

Object: //below is object metadata from mongo
    _id
    created_at
    lang
    source
    object: //this is real object data from our db
        id
        created_at
        object_class

我在这个集合上运行以下查询:

db.getCollection('foo').aggregate(
    [
    {
        $match: {
            lang: 'bar', 
            pushed_at:{
            $gte: new ISODate("2015-11-09T00:00:00.000Z"),
            $lt: new ISODate("2015-11-10T00:00:00.000Z")
            }
        }
    },
    {
        $group: {
            _id: "$object.id",
            occurences: {$sum: 1}
        }
    },
    {
        $match: {
            occurences: {$gt: 1}
        }
    }
])

返回: Alt text

我们的收藏中似乎有重复的条目。副本我指的是具有相同Object.object.id的对象。 我想使用我使用的agreggate函数的结果删除多余的出现。 请注意,我不想删除任何内容,只删除任何内容,因此聚合返回occurences: 1 以上。

如何使用汇总结果?

1 个答案:

答案 0 :(得分:1)

我认为你可以在shell中尝试:

db.foo.aggregate(
    [
    {
        $match: {
            lang: 'bar', 
            pushed_at:{
            $gte: new ISODate("2015-11-09T00:00:00.000Z"),
            $lt: new ISODate("2015-11-10T00:00:00.000Z")
            }
        }
    },
    {
        $group: {
            _id: "$object.id",
            occurences: {$sum: 1}
        }
    },
    {
        $match: {
            occurences: {$gt: 1}
        }
    }
]).result.forEach(function(x) {
    if(x.occurences > 1) {  
        for(i=0;i<x.occurences - 1;i++) {
            db.foo.remove({"object.id":x._id}, true);
        }
    }
}
);