Pymongo:在响应中删除 $oid 的最佳方法

Kit*_*Kit 6 pymongo pymongo-3.x flask-pymongo

我最近开始使用 Pymongo,现在我想找到删除 Response 中 $oid 的最佳方法

当我使用时find

result = db.nodes.find_one({ "name": "Archer" }
Run Code Online (Sandbox Code Playgroud)

并得到响应:

json.loads(dumps(result))
Run Code Online (Sandbox Code Playgroud)

结果将是:

{
  "_id": {
  "$oid": "5e7511c45cb29ef48b8cfcff"
  },
  "about": "A jazz pianist falls for an aspiring actress in Los Angeles."
}
Run Code Online (Sandbox Code Playgroud)

我的预期:

{
  "_id": "5e7511c45cb29ef48b8cfcff",
  "about": "A jazz pianist falls for an aspiring actress in Los Angeles."
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我们可以使用:

resp = json.loads(dumps(result))
resp['id'] = resp['id']['$oid']
Run Code Online (Sandbox Code Playgroud)

但我认为这不是最好的方法。希望大家有更好的解决方案。

Tob*_*bin 2

您可以利用聚合:

result = db.nodes.aggregate([{'$match': {"name": "Archer"}}
                             {'$addFields': {"Id": '$_id.oid'}},
                             {'$project': {'_id': 0}}])
data = json.dumps(list(result))
Run Code Online (Sandbox Code Playgroud)

在这里,$addFields我添加了一个新字段Id,其中介绍了 的值oid。然后我进行投影,消除_id结果的场。之后,当我得到光标时,我将其变成一个列表。

它可能不会像你希望的那样工作,但总体思路是存在的。