我在节点js中有以下代码,它检查文档是否已更新/插入。
studentSchool = await this.studentSchoolModel.findOneAndUpdate(
{ student: studentID, phase: "Secondary" },
{ student: studentID, school: schoolID, phase: "Secondary"},
{ new: false, upsert: true, rawResult: true });
我尝试在python中执行相同的操作,但收到以下错误:
studentSchool = studentSchoolModel.find_one_and_update(
{ 'student': studentID, 'phase': 'Secondary' },
{ "$set": {'student': studentID, 'school': schoolID, 'phase': 'Secondary',}},
new=True, upsert=True, rawResult=True );
错误:BSON字段“passRawResult”是未知字段
有人知道我做错了什么吗?
1条答案
按热度按时间8oomwypt1#
似乎Mongoose添加了rawResult参数,最新的MongoDB(v6.0)和Pymongo本身并不支持该参数。
您可以将ReturnDocument设置为before,如果进行upsert,则结果为None,否则为现有文档的词典。
因此,您的查询变为
来自MongoDB文档https://www.mongodb.com/docs/manual/reference/method/db.collection.findOneAndUpdate/#update-document-with-upsert:
如果returnNewDocument为false,则该操作将返回null,因为没有要返回的原始文档。
正如您所看到的,我还从$set中删除了“student”和“phase”键,因为它们在本例中似乎没有必要,因为如果使用upsert创建新文档,查询中的部分也将用于它。