gpt4 book ai didi

python - 从 Pymongo 结果中删除 _id 元素

转载 作者:IT老高 更新时间:2023-10-28 13:03:53 25 4
gpt4 key购买 nike

我正在尝试使用 MongoDB 和 Flask(使用 pymongo 驱动程序)创建 Web 服务。当然,对数据库的查询会返回包含“_id”字段的文档。我不想把它发给客户,那我该如何移除呢?

这是一个 Flask 路由:

@app.route('/theobjects')
def index():
objects = db.collection.find()
return str(json.dumps({'results': list(objects)},
default = json_util.default,
indent = 4))

这会返回:

{
"results": [
{
"whatever": {
"field1": "value",
"field2": "value",
},
"whatever2": {
"field3": "value"
},
...
"_id": {
"$oid": "..."
},

...
}
]}

我以为它是一本字典,我可以在返回之前删除元素:

del objects['_id']

但这会返回一个 TypeError:

TypeError: 'Cursor' object does not support item deletion

所以它不是字典,而是我必须将每个结果作为字典进行迭代。所以我尝试用这段代码做到这一点:

for object in objects:
del object['_id']

每个对象字典看起来都是我现在想要的样子,但是对象光标是空的。所以我尝试创建一个新字典,并在从每个字典中删除 _id 后,添加到 Flask 将返回的新字典:

new_object = {}
for object in objects:
for key, item in objects.items():
if key == '_id':
del object['_id']
new_object.update(object)

这只是返回一个带有第一级键的字典,没有别的。

所以这是一个标准的嵌套字典问题,但我也很震惊 MongoDB 没有办法轻松处理这个问题。

MongoDB documentation说明您可以排除 _id 与

{ _id : 0 }

但这对 pymongo 没有任何作用。 Pymongo documentation说明您可以列出您想要返回的字段,但是“(“_id”将始终包括在内)”。严重地?有没有办法解决这个问题?我在这里忽略了一些简单而愚蠢的事情吗?

最佳答案

要在 pymongo 的查找查询中排除 _id 字段,您可以使用:

db.collection.find({}, {'_id': False})

文档在这方面有些误导,因为它说始终包含 _id 字段。但是你可以像上图那样排除它。

关于python - 从 Pymongo 结果中删除 _id 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12345387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com