@@ -258,7 +258,28 @@ public static BulkWriteBatchResult Create(
258
258
{
259
259
var processedRequests = new [ ] { request } ;
260
260
var unprocessedRequests = Enumerable . Empty < WriteRequest > ( ) ;
261
- var upsertId = ( writeConcernResult == null ) ? null : writeConcernResult . Upserted ;
261
+ BsonValue upsertId = null ;
262
+ var documentsAffected = 0L ;
263
+ if ( writeConcernResult != null )
264
+ {
265
+ documentsAffected = writeConcernResult . DocumentsAffected ;
266
+ upsertId = writeConcernResult . Upserted ;
267
+ var updateRequest = request as UpdateRequest ;
268
+ if ( upsertId == null &&
269
+ documentsAffected == 1 &&
270
+ updateRequest != null &&
271
+ updateRequest . IsUpsert . GetValueOrDefault ( false ) &&
272
+ ! writeConcernResult . UpdatedExisting )
273
+ {
274
+ // Get the _id field first from the Update document
275
+ // and then from the Query document.
276
+ upsertId = updateRequest . Update . ToBsonDocument ( )
277
+ . GetValue (
278
+ "_id" ,
279
+ updateRequest . Query . ToBsonDocument ( )
280
+ . GetValue ( "_id" , null ) ) ;
281
+ }
282
+ }
262
283
var upserts = ( upsertId == null ) ? Enumerable . Empty < BulkWriteUpsert > ( ) : new [ ] { new BulkWriteUpsert ( 0 , upsertId ) } ;
263
284
var writeErrors = __noWriteErrors ;
264
285
WriteConcernError writeConcernError = null ;
@@ -277,7 +298,6 @@ public static BulkWriteBatchResult Create(
277
298
}
278
299
}
279
300
280
- var documentsAffected = ( writeConcernResult == null ) ? 0 : writeConcernResult . DocumentsAffected ;
281
301
if ( request . RequestType == WriteRequestType . Insert && writeErrors . Count == 0 )
282
302
{
283
303
documentsAffected = 1 ; // note: DocumentsAffected is 0 for inserts
0 commit comments