Получить массив строк из запроса Pymongo
Мне нужно получить массив со значениями из поля 'colname'. Я не могу вернуть курсор, просто массив значений.
Есть ли способ запросить этот массив без необходимости зацикливания курсора? Я чувствую, что это пустая трата ресурсов обработки.
Прямо сейчас я делаю это:
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
headers = client['headers']
entomo = headers.entomo
entomo_data = entomo.find()
entomo_array = []
for data in entomo_data:
entomo_array.append(data['colname'])
Тогда я верну entomo_array
,
2 ответа
Решение
Если поле 'colname' имеет разные значения или если вас не интересуют повторяющиеся значения, вы можете использовать отдельную функцию. Для вашего примера:
entomo_array = entomo.find().distinct('colname')
Вы можете сделать это с .aggregate()
метод по $group
с помощью ваших документов None
cursor = entomo.aggregate([
{'$group': {
'_id': None,
'data': {'$push': '$colname'}
}}
])
Оттуда вы просто потребляете курсор, используя next
,
entomo_array = next(cursor)['data']
Но если 'colname' является уникальным в коллекции, вы можете просто использовать distinct
метод.
entomo_array = entomo.distinct('colname')