Как распечатать все отфильтрованные элементы в PyMon go? - PullRequest
0 голосов
/ 12 января 2020

Я довольно новичок в программировании и пытаюсь отфильтровать мою MongoDB, чтобы затем распечатать каждый найденный элемент.

при выборе одного элемента, это не кажется проблемой.

c = db.get_collection("measurements")
print(c.find_one(filter={"source_id": ObjectId('5da20646b3f23b001054cf5a')}))

печать всего элемента:

{'_id': ObjectId('5da20651b3f23b001054cf5b'), 'version': 'c79a820', 'source_id': ObjectId('5da20646b3f23b001054cf5a'), 'timestamp': datetime.datetime(2019, 10, 12, 16, 58, 48), 'location_information': {'latitude': 48.9989464, 'longitude': 12.1009412, 'accuracy': 15.557,
'altitude': 418.70001220703125, 'age': 74}, 'battery': 0.24, 'cell_info': [{'active': True, 'type': 'LTE', 'cell_identity': {'cell_id': '20724994', 'e_utra_absolute_radio_frequency_channel_number': '6200', 'location_area_code': '58612', 'mobile_country_code': '262', 'mobile_network_code': '3', 'physical_cell_id': '118'}, 
'cell_signal_strength': {'asu': '24', 'channel_quality_indicator': '6', 'dbm': '-116', 'reference_signal_received_power': '-116', 'reference_signal_received_quality': '-13', 'reference_signal_signal_to_noise_ratio': '-2', 'timing_advance_radio': '8'}}, {'active': False, 'type': 'LTE', 'cell_identity': {'e_utra_absolute_radio_frequency_channel_number': '6200', 
'mobile_country_code': '2147483647', 'mobile_network_code': '2147483647', 'physical_cell_id': '445'}, 'cell_signal_strength': {'asu': '19', 'dbm': '-121', 'reference_signal_received_power': '-121', 'reference_signal_received_quality': '-18', 'timing_advance_radio': '-1'}}, {'active': False, 'type': 'LTE', 'cell_identity': {'e_utra_absolute_radio_frequency_channel_number': '6200', 
'mobile_country_code': '2147483647', 'mobile_network_code': '2147483647', 'physical_cell_id': '129'}, 'cell_signal_strength': {'asu': '18', 'dbm': '-122', 'reference_signal_received_power': '-122', 
'reference_signal_received_quality': '-19', 'timing_advance_radio': '-1'}}]}

Теперь я хочу напечатать каждый элемент, который равен / моложе сегодняшней даты:

results = (c.find({'timestamp':{'$gt':'2020, 1, 1, 12, 25, 1'}}))

for x in results:
        pprint.pprint(x)

он ничего не печатает.

Что я делаю не так?

1 Ответ

0 голосов
/ 12 января 2020

Драйверы python требуют, чтобы вы преобразовали запрос даты / времени в экземпляр datetime, чтобы выполнить требуемое сравнение для поля date (ISODate) в коллекции.

Так что вам нужно что-то как:

results = db.mycollection.find({'timestamp':{'$gt': datetime.datetime(2019, 1, 1, 12, 25, 1)}})

Полный обработанный пример:

import pymongo
import datetime
from bson import ObjectId

db = pymongo.MongoClient()['mycollection']

db.mycollection.insert_one({'version': 'c79a820', 'source_id': ObjectId('5da20646b3f23b001054cf5a'), 'timestamp': datetime.datetime(2019, 10, 12, 16, 58, 48), 'location_information': {'latitude': 48.9989464, 'longitude': 12.1009412, 'accuracy': 15.557, 'altitude': 418.70001220703125, 'age': 74}, 'battery': 0.24, 'cell_info': [{'active': True, 'type': 'LTE', 'cell_identity': {'cell_id': '20724994', 'e_utra_absolute_radio_frequency_channel_number': '6200', 'location_area_code': '58612', 'mobile_country_code': '262', 'mobile_network_code': '3', 'physical_cell_id': '118'}, 'cell_signal_strength': {'asu': '24', 'channel_quality_indicator': '6', 'dbm': '-116', 'reference_signal_received_power': '-116', 'reference_signal_received_quality': '-13', 'reference_signal_signal_to_noise_ratio': '-2', 'timing_advance_radio': '8'}}, {'active': False, 'type': 'LTE', 'cell_identity': {'e_utra_absolute_radio_frequency_channel_number': '6200', 'mobile_country_code': '2147483647', 'mobile_network_code': '2147483647', 'physical_cell_id': '445'}, 'cell_signal_strength': {'asu': '19', 'dbm': '-121', 'reference_signal_received_power': '-121', 'reference_signal_received_quality': '-18', 'timing_advance_radio': '-1'}}, {'active': False, 'type': 'LTE', 'cell_identity': {'e_utra_absolute_radio_frequency_channel_number': '6200', 'mobile_country_code': '2147483647', 'mobile_network_code': '2147483647', 'physical_cell_id': '129'}, 'cell_signal_strength': {'asu': '18', 'dbm': '-122', 'reference_signal_received_power': '-122', 'reference_signal_received_quality': '-19', 'timing_advance_radio': '-1'}}]})
results = db.mycollection.find({'timestamp':{'$gt': datetime.datetime(2019, 1, 1, 12, 25, 1)}})

for x in results:
    print(x)
...