При использовании Pymongo поиск возвращает только ObjectID и поле filterd и неверные результаты - PullRequest
0 голосов
/ 21 сентября 2019

Используя Pymongo с функцией find, вернуть только ObjectID, а не все данные.Мой код:

client = Mongo_Connection()
logs_collection = client[setting['logs-db-name']][setting['logs-collection-name']]
last_time_delta = datetime.datetime.now() - datetime.timedelta(hours=setting['logs-from-X-hours'])

results = logs_collection.find(             # Build the query
                    {'insert_time': {'$gte': last_time_delta}},
                    {rule['field']:rule['value']})

            for log in results:  
                print(log) 

rule ['field'] = logid

rule ['value'] = 4798

Моя печать показывает, что:

{'_id': ObjectId('5d8672d0f9c301045c071ca3'), 'logid': 1102}
{'_id': ObjectId('5d8672d0f9c301045c071ca4'), 'logid': 5379}
{'_id': ObjectId('5d8672d2f9c301045c071ca5'), 'logid': 5379}
{'_id': ObjectId('5d8672d4f9c301045c071ca6'), 'logid': 4798}

Я хотел получить ТОЛЬКО logid 4798 и получить все данные, например

{
    "_id" : ObjectId("5d8672d4f9c301045c071ca6"),
    "logid" : 4798,
    "client_time" : ISODate("2019-09-22T00:58:27.000Z"),
    "insert_time" : ISODate("2019-09-21T21:58:28.510Z"),
    "type" : 8,
    "src" : "Microsoft-Windows-Security-Auditing",
    "cat" : 13824,
    "dataList" : [ 
        "S-1-5-21-3876502129-1844923064-4112176513-1001", 
        "USER", 
        "PC-DESKTOP", 
        "0xafa8e", 
        "S-1-5-18", 
        "PC-DESKTOP$", 
        "PCNETWORK", 
        "0x3e7", 
        "XboxLive", 
        "1", 
        "1", 
        "%%8099", 
        "0", 
        "2019-09-21T18:58:22.960005000Z", 
        "27652", 
        "S-1-5-21-3876502129-1844923064-4112176513-1001", 
        "USER", 
        "PC-DESKTOP", 
        "0xafac0", 
        "XboxLive", 
        "1", 
        "1", 
        "%%8099", 
        "0", 
        "2019-09-21T18:58:22.960005000Z", 
        "27652", 
        "USER2", 
        "PC-DESKTOP", 
        "S-1-5-21-3876502129-1844923064-4112176513-1004", 
        "S-1-5-21-3876502129-1844923064-4112176513-1001", 
        "USER", 
        "PC-DESKTOP", 
        "0xafa8e", 
        "0x7390", 
        "C:\\Windows\\System32\\mmc.exe"
    ],
    "hostname" : "Pc-Desktop",
    "username" : "User",
    "os" : "Windows",
    "ip_add" : "192.168.0.123",
    "mac_add" : "1c:87:2c:77:f0:99"
}

Без поля и значения, я могу получить все данные из MongoDB, но я должен использовать их для получения динамическогоданные из БД по запросу с другого сервера.Поэтому я пытаюсь заглянуть в учебник по пимонго, ничего не нашел об этих результатах.

1 Ответ

0 голосов
/ 22 сентября 2019

Это тонкий, но ваши фигурные скобки находятся не в том месте.Попробуйте это:

results = db.logs_collection.find(  # Build the query
    {'insert_time': {'$gte': last_time_delta},
    rule['field']: rule['value']})

Вы получили исходные результаты по той причине, что вы передали второй параметр dict в функцию find.Второй параметр - это фильтр результатов;поэтому вместо того, чтобы фильтровать записи, вы фильтровали результаты.

Удачи в вашем путешествии по пимонго!

...