MongoDB: удалить где - PullRequest
       5

MongoDB: удалить где

1 голос
/ 24 февраля 2020

В консоли MongoDB как удалить поле (ключ), размер списка которого больше 3? Вот мой json пример документа:

 [{
    "_id": {
        "$oid": "5e52d5d665a51b1952871b4b"
    },
    "domains": {
        "youtube_com_": [
            "10.0.0.6",
            "10.0.0.3",
            "10.0.0.7"
        ],
        "imrworldwide_com_": [
            "10.0.0.2",
            "10.0.0.10",
            "10.0.0.4"
        ],
        "adadvisor_net_": [
            "10.0.0.3"
        ],
        "scorecardresearch_com_": [
            "10.0.0.2"
        ],
        "adnxs_com_": [
            "10.0.0.2",
            "10.0.0.3",
            "10.0.0.7",
            "10.0.0.6",
            "10.0.0.9"
        ],
        "doubleclick_net_": [
            "10.0.0.8",
            "10.0.0.7"
        ],........

Внутри поля (ключа) domains для каждого имени домена проверьте, не меньше ли количество IP-адресов. Если это так, удалите домен.

1 Ответ

0 голосов
/ 24 февраля 2020

Вы можете использовать сложный агрегатный запрос, но здесь я предпочитаю 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']}}
...