在Python 2.x中查找唯一的主机名

时间:2018-06-25 15:46:40

标签: python regex mongodb python-2.7 aggregation-framework

我正在从不同的数据源收集数据,这些数据源都推送到MongoDB中的不同集合。所有数据源都有一个字段,用于存储特定系统的主机名。但是,有些仅具有主机名(即HOSTNAME1),而另一些具有主机名和域名(即HOSTNAME1.XXX.XXX.COM)。我的任务是获取所有数据源中唯一主机名的数量。一个数据源很可能会给我HOSTNAME1,而另一个数据源可能会给我HOSTNAME1.XXX.XXX.COM。我目前正在使用聚合方法“ addtoSet”来筛选出任何共享相同格式的重复主机名。关于如何解释不共享相同格式且不唯一的主机名的任何建议?首选使用Python 2.x的解决方案,但不是必需的。

    def uniqueCount (collName, uploadDate):

        sysList = list(cursor.aggregate([ { '$match':{'UPLOAD_DATE':uploadDate} }, { '$group': {
                        '_id': collName,
                        'uniqueHosts': {'$addToSet': {'$toUpper':'$HOSTNAME'}}
                    }}]))

        return len(sysList[0]['uniqueHosts'])

1 个答案:

答案 0 :(得分:0)

您非常接近-只需变换HOSTNAME字段即可。可以使用$arrayElemAt$split在数据库端完全完成:

db.getCollection('collection').aggregate([
    {$group: {
        _id: ...,
        // Set of HOSTNAME.split('.')[0]
        uniqueHosts: {$addToSet: {$arrayElemAt: [{$split: ['$HOSTNAME', '.']}, 0]}}
    }}
])