Невозможно получить данные из MongoDB, если в одной коллекции есть элементы, отличные от python - PullRequest
0 голосов
/ 04 августа 2020

У меня есть набор JSON в коллекциях MongoDB, которые получают веб-перехватчики, и я не контролирую это, и элементы одного набора не будут одинаковыми для другого. Я могу получить те элементы, которые имеют одинаковый ключ для всех других данных. Но мне нужно получить эти данные независимо от того, присутствуют они в других документах или нет. Присоединение pi c значений, имеющихся в MongoDB.
enter image description here

Это 2 разных типа веб-перехватчиков, которые я получаю


Я использую приведенный ниже код для вставки веб-перехватчиков в MongoDB

@app.route('/webhook', methods=['POST', 'GET'])
def respond():
    collection10 = db['webhooks']
    a = request.get_json()
    print(a)
    collection10.insert_many(a)
    return render_template("signin.html")

Предположим, я пытаюсь получить «_id», я могу легко получить, поскольку оба данные имеют "_id". Но если я попытаюсь получить те элементы, которые присутствуют в одном, а не в другом, я получаю сообщение об ошибке.
Я использую приведенный ниже код для удаления элементов:

@app.route('/webhookdisplay', methods=['POST', 'GET'])
def webhooksdis():
    collection10 = db['webhooks']
    for i in collection10.find({}):
        posts = i['name']
        print(posts)
    return render_template("webhooks.html", posts = posts)

Для приведенного выше кода я получаю ошибку как KeyError: 'name'
Если я получаю «_id» в том же мода, как упоминалось выше, будет восстановлена.
** Ожидаемый результат: ** Требуется получить вложенные данные независимо от того, присутствуют они в других данных или нет. Было бы здорово, если бы были какие-либо другие подходы для отображения определенных данных в виде таблицы на HTML странице
Цель Как только я получу отдельные данные, я могу отобразить их во внешнем интерфейсе, используя Jinja в форма таблицы

1 Ответ

1 голос
/ 04 августа 2020

Если вы не уверены, будет ли возвращенная запись содержать конкретный ключ, тогда вам следует использовать встроенную функцию .get(). , которая по умолчанию возвращает None, если ключ отсутствует. , в отличие от ссылок в квадратных скобках. Это позволит избежать исключения KeyError, которое вы видите.

posts = i.get('name')

if posts is None:
    # Handle logic if name doesn't exist

EDIT: Если вам нужно вложенное поле:

name = i.get('data', {}).get('geofence_metadata', {}).get('name')
...