使用python Flask从MongoDB mongoengine的返回中删除“ _id”

问题描述

我将mongoengine用于我的python flask应用程序,并将Custom 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

解决方法

您可以遍历内部的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}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...