我正在从不同的数据源收集数据,这些数据源都推送到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'])
答案 0 :(得分:0)
您非常接近-只需变换HOSTNAME
字段即可。可以使用$arrayElemAt
和$split
在数据库端完全完成:
db.getCollection('collection').aggregate([
{$group: {
_id: ...,
// Set of HOSTNAME.split('.')[0]
uniqueHosts: {$addToSet: {$arrayElemAt: [{$split: ['$HOSTNAME', '.']}, 0]}}
}}
])