Python 如何在PyMongo中打印所有过滤的元素?

Python 如何在PyMongo中打印所有过滤的元素?,python,mongodb,filter,printing,pymongo,Python,Mongodb,Filter,Printing,Pymongo,我对编程非常陌生,正在尝试过滤我的MongoDB,然后打印出找到的每个元素 当选择一个元素时,这似乎不是问题 c = db.get_collection("measurements") print(c.find_one(filter={"source_id": ObjectId('5da20646b3f23b001054cf5a')})) 打印整个元素: {'_id': ObjectId('5da20651b3f23b001054cf5b'), 'version': 'c79a820', 's

我对编程非常陌生,正在尝试过滤我的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)
它不打印任何东西


我做错了什么?

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)