ddw*_*ddw 25 python mongodb pymongo
我正在尝试使用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))
Run Code Online (Sandbox Code Playgroud)
返回:
{
"results": [
{
"whatever": {
"field1": "value",
"field2": "value",
},
"whatever2": {
"field3": "value"
},
...
"_id": {
"$oid": "..."
},
...
}
]}
Run Code Online (Sandbox Code Playgroud)
我以为它是一本字典,我可以在返回之前删除该元素:
del objects['_id']
Run Code Online (Sandbox Code Playgroud)
但是这会返回一个TypeError:
TypeError: 'Cursor' object does not support item deletion
Run Code Online (Sandbox Code Playgroud)
所以它不是字典,而是我必须将每个结果作为字典迭代.所以我试着用这段代码做到这一点:
for object in objects:
del object['_id']
Run Code Online (Sandbox Code Playgroud)
每个对象字典看起来都是我现在喜欢的方式,但是对象光标是空的.所以我尝试创建一个新的字典,并在从每个字典中删除_id后,添加到Flask将返回的新字典:
new_object = {}
for object in objects:
for key, item in objects.items():
if key == '_id':
del object['_id']
new_object.update(object)
Run Code Online (Sandbox Code Playgroud)
这只返回一个带有第一级键的字典而没有别的.
所以这是一个标准的嵌套字典问题,但我也很震惊MongoDB没有办法轻松处理这个问题.
在MongoDB的文档说明了可以排除与_id
{ _id : 0 }
Run Code Online (Sandbox Code Playgroud)
但这与pymongo毫无关系.该Pymongo文件解释说,你可以列出你希望返回的字段,但"('_id’将始终包含)".真的吗?有没有办法解决这个问题?有什么简单而愚蠢的东西让我在这里俯瞰吗?
Tho*_*mas 79
要_id在pymongo中的查找查询中排除该字段,您可以使用:
db.collection.find({}, {'_id': False})
Run Code Online (Sandbox Code Playgroud)
该文档在这方面有些误导,因为它说该_id字段总是包含在内.但你可以像上面所示那样排除它.
| 归档时间: |
|
| 查看次数: |
20499 次 |
| 最近记录: |