@@ -430,8 +430,8 @@ func (coll *Collection) DeleteMany(ctx context.Context, filter interface{},
430
430
return coll .delete (ctx , filter , false , rrMany , opts ... )
431
431
}
432
432
433
- func (coll * Collection ) updateOrReplace (ctx context.Context , filter bsoncore.Document , update interface {}, multi bool , expectedRr returnResult ,
434
- opts ... * options.UpdateOptions ) (* UpdateResult , error ) {
433
+ func (coll * Collection ) updateOrReplace (ctx context.Context , filter bsoncore.Document , update interface {}, multi bool ,
434
+ expectedRr returnResult , checkDollarKey bool , opts ... * options.UpdateOptions ) (* UpdateResult , error ) {
435
435
436
436
if ctx == nil {
437
437
ctx = context .Background ()
@@ -441,16 +441,11 @@ func (coll *Collection) updateOrReplace(ctx context.Context, filter bsoncore.Doc
441
441
uidx , updateDoc := bsoncore .AppendDocumentStart (nil )
442
442
updateDoc = bsoncore .AppendDocumentElement (updateDoc , "q" , filter )
443
443
444
- switch update .(type ) {
445
- case bsoncore.Document :
446
- updateDoc = bsoncore .AppendDocumentElement (updateDoc , "u" , update .(bsoncore.Document ))
447
- default :
448
- u , err := transformUpdateValue (coll .registry , update , true )
449
- if err != nil {
450
- return nil , err
451
- }
452
- updateDoc = bsoncore .AppendValueElement (updateDoc , "u" , u )
444
+ u , err := transformUpdateValue (coll .registry , update , checkDollarKey )
445
+ if err != nil {
446
+ return nil , err
453
447
}
448
+ updateDoc = bsoncore .AppendValueElement (updateDoc , "u" , u )
454
449
if multi {
455
450
updateDoc = bsoncore .AppendBooleanElement (updateDoc , "multi" , multi )
456
451
}
@@ -482,7 +477,7 @@ func (coll *Collection) updateOrReplace(ctx context.Context, filter bsoncore.Doc
482
477
defer sess .EndSession ()
483
478
}
484
479
485
- err : = coll .client .validSession (sess )
480
+ err = coll .client .validSession (sess )
486
481
if err != nil {
487
482
return nil , err
488
483
}
@@ -546,7 +541,7 @@ func (coll *Collection) UpdateOne(ctx context.Context, filter interface{}, updat
546
541
return nil , err
547
542
}
548
543
549
- return coll .updateOrReplace (ctx , f , update , false , rrOne , opts ... )
544
+ return coll .updateOrReplace (ctx , f , update , false , rrOne , true , opts ... )
550
545
}
551
546
552
547
// UpdateMany updates multiple documents in the collection.
@@ -562,7 +557,7 @@ func (coll *Collection) UpdateMany(ctx context.Context, filter interface{}, upda
562
557
return nil , err
563
558
}
564
559
565
- return coll .updateOrReplace (ctx , f , update , true , rrMany , opts ... )
560
+ return coll .updateOrReplace (ctx , f , update , true , rrMany , true , opts ... )
566
561
}
567
562
568
563
// ReplaceOne replaces a single document in the collection.
@@ -596,7 +591,7 @@ func (coll *Collection) ReplaceOne(ctx context.Context, filter interface{},
596
591
updateOptions = append (updateOptions , uOpts )
597
592
}
598
593
599
- return coll .updateOrReplace (ctx , f , r , false , rrOne , updateOptions ... )
594
+ return coll .updateOrReplace (ctx , f , r , false , rrOne , false , updateOptions ... )
600
595
}
601
596
602
597
// Aggregate runs an aggregation framework pipeline.
0 commit comments