В настоящее время я выполняю запрос mongoDB с использованием pyMongo, где я хочу вернуть содержимое массива, хранящегося в каждом объекте в базе данных, под именем «TR Trace». Однако данные в объекте JSON хранятся в виде строки, и мне нужно преобразовать ее в двойную, прежде чем вставлять в список, что я нахожу проблемным. Вот мой запрос:

pipeline = [{'$match':{"Timestamp":{'$gte':m(), '$lt':current()},

    'Frequency Survey Reference':{'$regex':'Ch2'}}},

    {'$group': {
        '_id': '$Timestamp',
        'Trace' : {'$push': '$TR Trace'}
    }},

    {'$sort': {'_id': -1}},

    #{'$limit': 1}
    ]

get_tr = collection.aggregate(pipeline, allowDiskUse=True)

tr = list(get_tr)

Я попробовал это, чтобы выполнить преобразование, и получил соответствующую ошибку:

get_tr = get_tr.astype(np.float)

AttributeError: 'CommandCursor' object has no attribute 'astype'

И с тех пор я немного потерялся. Правильно ли я выполняю преобразование?

0
Murray Ross 14 Апр 2020 в 14:52

1 ответ

Лучший ответ

Используйте конвейер агрегирования $toDouble оператор. Изменять

'Trace' : {'$push': '$TR Trace'}

К

'Trace' : {'$push': {'$toDouble': '$TR Trace'}}

Также get_tr = get_tr.astype(np.float) не будет работать, поскольку aggregate() возвращает курсор для итерации.

0
Belly Buster 14 Апр 2020 в 13:14