Поиск уникальных имен хостов в Python 2.x

1

Я собираю данные из разных источников данных, которые все нажимают на разные коллекции в 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'])
Теги:
python-2.7
aggregation-framework

1 ответ

0

Вы совсем близко - просто HOSTNAME поле HOSTNAME. Это можно сделать полностью на стороне БД, используя $arrayElemAt и $split:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню