Удалите ‘_id’ из возврата MongoDB mongoengine с помощью python Flask

#python #mongodb #flask-mongoengine

#python #mongodb #flask-mongoengine

Вопрос:

Я использую mongoengine для своего приложения python flask и использую пользовательский ORM для проекта.

Я столкнулся с проблемой в GET API, где я извлекаю список данных активов, которые хранятся в моей базе данных, и когда я извлекаю данные, он показывает мне такие данные, как: code,

            {
               "message": "done",
               "result": {
                   "asset": [
                              {
                                  "_id": {
                                      "$oid": "5fa4fb9ea33244b15c6605bc"
                                  },
                                  "asset_download_link_android": "https://link",
                                  "asset_download_link_ios": "https://link",
                                  "asset_download_link_mac": "https://link",
                                  "asset_download_link_windows": "https://link,
                                  "asset_id": 1,
                                  "asset_name": "car_exhibition_1",
                                  "asset_size": "100MB",
                                  "asset_thumbnail_url": "https://link",
                                  "asset_version": "1.0.0",
                                  "created_at": {
                                      "$date": 1604647838316
                                  },
                                  "email": "xyz@gmail.com"
                              },
                          ]
                      },
                      "status": 200
                  }
  

Теперь,

             "_id": {
                "$oid": "5fa4fb9ea33244b15c6605bc"
            }
  

который был создан моим ORM, и из-за этого знака «$» я не могу продолжить, потому что мой объект может назначить переменную со специальным символом в начале. Итак, пожалуйста, кто-нибудь может мне помочь, как я могу получить ответ без поля $ oid в ответе.

Код, который я использую для получения ответа,

                   assets =  collection_name.objects.all()
                  return_val = jsonify({"message" : "done" , "status" : status_code, "result" :                                                                
                                       {"asset" : assets}})
                  return return_val, status_code
  

Комментарии:

1. Вам нужно _id это в вашем интерфейсе? Или, возможно; вместо того, чтобы исправлять $oid имя (или удалять идентификатор с del asset['_id'] помощью цикла), сделайте так, чтобы ваш интерфейс работал правильно $oid . Какой код вырывается на $ ?

2. Мне нужно работать с unity, как во внешнем интерфейсе, но они не могут принять «$ oid», как в переменной, потому что специальный символ не может позволить нам двигаться вперед. Итак, нужно удалить в ответе

Ответ №1:

Вы можете выполнить итерацию по внутреннему assets списку и удалить все ключи, содержащие ключи $ под ними:

 import json
import pprint

foo = json.loads("""
{
   "message": "done",
   "result": {
       "asset": [
                  {
                    "_id": {
                      "$oid": "5fa4fb9ea33244b15c6605bc"
                    },
                    "asset_download_link_android": "https://link",
                    "asset_download_link_ios": "https://link",
                    "asset_download_link_mac": "https://link",
                    "asset_download_link_windows": "https://link",
                    "asset_id": 1,
                    "asset_name": "car_exhibition_1",
                    "asset_size": "100MB",
                    "asset_thumbnail_url": "https://link",
                    "asset_version": "1.0.0",
                    "created_at": {
                      "$date": 1604647838316
                    },
                    "email": "xyz@gmail.com"
                  }
              ]
          },
          "status": 200
      }
""")

for asset in foo['result']['asset']:
    del asset['_id']
    del asset['created_at']
    
pprint.pprint(foo)
  

Результат:

 {'message': 'done',
 'result': {'asset': [{'asset_download_link_android': 'https://link',
                       'asset_download_link_ios': 'https://link',
                       'asset_download_link_mac': 'https://link',
                       'asset_download_link_windows': 'https://link',
                       'asset_id': 1,
                       'asset_name': 'car_exhibition_1',
                       'asset_size': '100MB',
                       'asset_thumbnail_url': 'https://link',
                       'asset_version': '1.0.0',
                       'email': 'xyz@gmail.com'}]},
 'status': 200}