Skip to content

Commit 3fc288e

Browse files
committed
Fix did_upsert logic
1 parent 5cca021 commit 3fc288e

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

pymongo/results.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,7 @@ def upserted_id(self) -> Any:
173173
def did_upsert(self) -> bool:
174174
"""Whether an upsert took place."""
175175
assert self.__raw_result is not None
176-
result = self.__raw_result.get("upserted")
177-
return result is not None and len(str(result)) > 0
176+
return "upserted" in self.__raw_result
178177

179178

180179
class DeleteResult(_WriteResult):

test/test_results.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,20 +122,29 @@ def test_update_result(self):
122122
self.assertEqual(raw_result["n"], result.matched_count)
123123
self.assertEqual(raw_result["nModified"], result.modified_count)
124124
self.assertEqual(raw_result["upserted"], result.upserted_id)
125-
self.assertEqual(result.did_upsert, False)
125+
self.assertEqual(result.did_upsert, True)
126126

127-
raw_result_upserted = {
127+
raw_result_2 = {
128128
"n": 1,
129129
"nModified": 1,
130130
"upserted": [
131131
{"index": 5, "_id": 1},
132132
],
133133
}
134-
self.repr_test(UpdateResult, raw_result_upserted)
134+
self.repr_test(UpdateResult, raw_result_2)
135135

136-
result = UpdateResult(raw_result_upserted, True)
136+
result = UpdateResult(raw_result_2, True)
137137
self.assertEqual(result.did_upsert, True)
138138

139+
raw_result_3 = {
140+
"n": 1,
141+
"nModified": 1,
142+
}
143+
self.repr_test(UpdateResult, raw_result_3)
144+
145+
result = UpdateResult(raw_result_3, True)
146+
self.assertEqual(result.did_upsert, False)
147+
139148
result = UpdateResult(raw_result, False)
140149
self.assertEqual(raw_result, result.raw_result)
141150
error_msg = "A value for .* is not available when"

0 commit comments

Comments
 (0)