Вы можете использовать сложный агрегатный запрос, но здесь я предпочитаю pymon go, так как (ИМХО) он намного понятнее:
records = db.mycollection.find()
for record in records:
domains = record.get('domains')
for domain in domains.copy():
ips = domains.get(domain)
if len(ips) <3:
record['domains'].pop(domain)
db.mycollection.replace_one({'_id': record['_id']}, record, upsert=True)
pprint.pprint(db.mycollection.find_one({}))
Это удаляет любые домены с менее чем 3 записями (настроить if len(ips) <3
logi c при необходимости):
{'_id': ObjectId('5e530f9277fa4a34f9c5c2be'),
'domains': {'adnxs_com_': ['10.0.0.2',
'10.0.0.3',
'10.0.0.7',
'10.0.0.6',
'10.0.0.9'],
'imrworldwide_com_': ['10.0.0.2', '10.0.0.10', '10.0.0.4'],
'youtube_com_': ['10.0.0.6', '10.0.0.3', '10.0.0.7']}}