PyMongo报错bson.errors.InvalidDocument: Cannot encode object的解决办法

博客提及在Python中加上一行代码就能解决问题,但未详细说明具体问题和代码内容。
部署运行你感兴趣的模型镜像

这里写图片描述

加上这行就好了…

这里写图片描述

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

# 学号+姓名 from bson import ObjectId from pymongo import MongoClient import datetime class MongoUtil(object): def __init__(self): self.client = MongoClient() self.db = self.client['qa_system'] # 数据库名:qa_system self.question = self.db['question'] # 问题集合 self.answer = self.db['answer'] # 回答集合 self.user = self.db['user'] # 用户集合 def save_user_info(self, username, password_hash): """保存用户信息到user集合""" now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') user_data = { 'username': username, 'password_hash': password_hash, 'register_time': now } result = self.user.insert_one(user_data) return str(result.inserted_id) # 返回用户ID def get_user_info(self, username): """查询用户信息""" user_info = self.user.find_one({'username': username}) if not user_info: return {'success': False, 'reason': '用户不存在!'} return {'success': True, 'user_info': user_info} def update_question(self, question_id, title, text): """更新问题""" self.question.update_one( {'_id': ObjectId(question_id)}, {'$set': {'title': title, 'detail': text}} ) return True def update_answer(self, answer_id, text): """更新回答""" self.answer.update_one( {'_id': ObjectId(answer_id)}, {'$set': {'answer': text}} ) return True def query_question(self): question_iter_obj = self.question.aggregate([ { '$lookup': { 'from': 'answer', 'localField': '_id', 'foreignField': 'question_id', 'as': 'answer_list' }}]) question_list = [] for question in question_iter_obj: question_list.append( { 'title': question['title'], 'detail': question['detail'], 'author': question['author'], 'vote_up': question['vote_up']-question['vote_down'], 'answer_number': len(question['answer_list']), 'question_id': str(question['_id']) } ) return question_list def insert_question(self, title, detail, author, ask_time): """插入新问题""" question_data = { 'title': title, 'detail': detail, 'author': author, 'ask_time': ask_time, 'vote_up': 0, 'vote_down': 0, 'answer_count': 0 } result = self.question.insert_one(question_data) return str(result.inserted_id) def insert_answer(self, question_id, answer, author, answer_time): """插入新回答""" answer_data = { 'question_id': question_id, 'answer': answer, 'author': author, 'answer_time': answer_time, 'vote_up': 0, 'vote_down': 0 } self.answer.insert_one(answer_data) # 更新问题的回答数量 self.question.update_one( {'_id': ObjectId(question_id)}, {'$inc': {'answer_count': 1}} ) def vote_for_question(self, object_id, value): self.question.update_one( {'_id': ObjectId(object_id)}, {'$inc': {value: 1}} ) # 0432230437曾敏 def vote_for_answer(self, object_id, value): self.answer.update_one( {'_id': ObjectId(object_id)}, {'$inc': {value: 1}} )修改代码
07-07
这个错误通常是因为你的 MongoDB 数据库没有授权给你的 Python 程序或用户帐户。 要解决这个问题,你需要确保在连接 MongoDB 数据库时提供了正确的数据库用户名和密码。你可以使用以下代码来连接 MongoDB 数据库: ``` import pymongo myclient = pymongo.MongoClient("mongodb://username:password@localhost:27017/") mydb = myclient["test"] ``` 在这里,"username" 和 "password" 是你的 MongoDB 数据库用户名和密码,"localhost" 是你的 MongoDB 服务器地址,"27017" 是 MongoDB 的默认端口号,"test" 是你的数据库名称。 如果你已经提供了正确的用户名和密码,但是仍然无法连接 MongoDB 数据库,则需要检查你的 MongoDB 数据库是否已经授权给你的用户帐户。你可以通过以下命令来授权: ``` use admin db.createUser( { user: "username", pwd: "password", roles: [ { role: "root", db: "admin" } ] } ) ``` 在这里,"username" 和 "password" 是你要授权的用户名和密码,"roles" 是你要授予该用户的角色。在这个例子中,我们将该用户授予 "root" 角色,这个角色拥有最高的权限,可以执行任何操作。 如果你已经正确授权了用户帐户,但仍然无法连接 MongoDB 数据库,则需要检查你的 MongoDB 数据库是否已经启用了身份验证。如果身份验证已经启用,你需要在连接 MongoDB 数据库时提供身份验证信息,如下所示: ``` import pymongo myclient = pymongo.MongoClient("mongodb://username:password@localhost:27017/", authSource="admin") mydb = myclient["test"] ``` 在这里,"authSource" 参数指定了你的身份验证数据库名称。在这个例子中,我们将身份验证数据库设置为 "admin"。 希望这些信息对你有所帮助!
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值