【问题标题】:Remove the '_id' from the return of MongoDB mongoengine with python Flask使用 python Flask 从 MongoDB mongoengine 的返回中删除“_id”
【发布时间】:2020-11-06 09:49:37
【问题描述】:

我正在为我的 python 烧瓶应用程序使用 mongoengine,并为项目使用自定义 ORM。

我在 GET API 中遇到了一个问题,我正在获取存储在我的数据库中的资产数据列表,当我检索数据时,它会向我显示如下数据: 代码,

           {
               "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

【问题讨论】:

  • 您的前端需要_id 吗?或者可能;而不是修复$oid 名称(或在循环中使用del asset['_id'] 删除id),让您的前端与$oid 一起正常工作。 $ 上的代码是什么?
  • 我需要像在前端一样使用统一,但他们不能像在变量中那样使用“$oid”,因为特殊字符不能让我们继续前进。所以,需要在响应中删除

标签: python mongodb flask-mongoengine


【解决方案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}

【讨论】:

    猜你喜欢
    • 2014-11-26
    • 2014-09-23
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 2018-09-07
    相关资源
    最近更新 更多