mongodb - remove specific subdocument mongo in array -


i have following document :

    {     "grades" : [         {             "grade" : 80,             "mean" : 75,             "std" : 8,             "otro" : [                 {                     "i" : 1                 },                 {                     "i" : 2                 }             ]         },         {             "grade" : 85,             "mean" : 90,             "std" : 5         },         {             "grade" : 85,             "mean" : 90,             "std" : 5,             "otro" : [                 {                     "i" : 3                 },                 {                     "i" : 4                 }             ]         },         {             "grade" : 85,             "mean" : 95,             "std" : 6         },         {             "grade" : 90,             "mean" : 85,             "std" : 5,             "otro" : [                 {                     "i" : 5                 },                 {                     "i" : 6                 }             ]         }     ] } 

what want it's remove sub document 'otro.i' : 2, have tried :

db.ejemplo.update(     {         _id: oid,         'grades':         {             $elemmatch:             {                 'otro':                 {                     $elemmatch:                     {                         'i': 2                     }                 }             }         }     },     {         '$pull':         {             'grades':             {                 'otro':                 {                     'i':2                 }             }         }     } ); 

but removes subdocument 'otro' key 'i' equal 2 ,

this before :

{             "grade" : 80,             "mean" : 75,             "std" : 8,             "otro" : [                 {                     "i" : 1                 },                 {                     "i" : 2                 }             ]         } 

this after

{             "grade" : 80,             "mean" : 75,             "std" : 8         } 

but result want :

{             "grade" : 80,             "mean" : 75,             "std" : 8,             "otro" : [                 {                     "i" : 1                 }             ]         } 

any ideas ?

use $ positional operator update document. identifies element in array update without explicitly specifying position of element in array:

db.ejemplo.update( {     _id: oid,     'grades':         {             $elemmatch:             {                 'otro':                 {                     $elemmatch:                     {                         'i': 2                     }                 }             }         }     },     {         '$pull': {             'grades.$.otro': {"i": 2}                         }     } ) 

Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Magento/PHP - Get phones on all members in a customer group -

session - Logging Out Using PHP -