2014-05-14 8 views
0

J'ai une collection

users 
{ 
    "_id" : ObjectId("53738eb7ac8ee07007c1d75a"), 
    "first" : "Shivam", 
    "connections" : [ 
     { 
      "invit_made" : [ ], 
      "fl_no" : 615, 
      "date" : ISODate("2014-05-16T00:00:00Z"), 
      "fl" : "LB", 
      "TYP" : "ZLP", 
      "invit_reciv" : [ ],  


     }, 
     { 
      "invit_made" : [ ], 
      "fl_no" : 615, 
      "date" : ISODate("2014-05-20T00:00:00Z"), 
      "fl" : "LB", 
      "invit_reciv" : [ ], 
      "TYP" : "ZLP", 

     } 

    ] 
} 

que je exécute la mise à jour accoding à ce jour dans connections.but mal documenté imbriquée est mis à jour dans mon cas.

db.users.update(
     { 'connections.TYP' : 'ZLP' 
     ,'connections.fl' : 'LB' 
     ,'connections.date' : ISODate("2014-05-20T00:00:00Z") 
     }, 
     { '$addToSet' : { 
         'connections.$.invit_reciv' : { 'last' : 'abc'} 
         } 
     }) 

Résultat réel Je reçois.

{ 
     "_id" : ObjectId("53738eb7ac8ee07007c1d75a"), 
     "first" : "Shivam", 
     "connections" : [ 
      { 
       "invit_made" : [ ], 
       "fl_no" : 615, 
       "date" : ISODate("2014-05-16T00:00:00Z"), 
       "fl" : "LB", 
       "TYP" : "ZLP", 
       "invit_reciv" : [ 
            { 
              "last" : "abc" 
           } 
           ],  


      }, 
      { 
       "invit_made" : [ ], 
       "fl_no" : 615, 
       "date" : ISODate("2014-05-20T00:00:00Z"), 
       "fl" : "LB", 
       "invit_reciv" : [ ], 
       "TYP" : "ZLP", 

      } 

     ] 
    } 

Résultat j'attends

{ 
    "_id" : ObjectId("53738eb7ac8ee07007c1d75a"), 
    "first" : "Shivam", 
    "connections" : [ 
     { 
      "invit_made" : [ ], 
      "fl_no" : 615, 
      "date" : ISODate("2014-05-16T00:00:00Z"), 
      "fl" : "LB", 
      "TYP" : "ZLP", 
      "invit_reciv" : [ ],  


     }, 
     { 
      "invit_made" : [ ], 
      "fl_no" : 615, 
      "date" : ISODate("2014-05-20T00:00:00Z"), 
      "fl" : "LB", 
      "invit_reciv" : [ 
       { 
         "last" : "abc" 
       } 

          ], 
      "TYP" : "ZLP", 

     } 

    ] 
} 

S'il vous plaît me aider à comprendre ce qui se passe dans la requête actuelle et ce qui est mal avec elle.

Répondre

1

Vous devez utiliser elemMatch $ avec l'opérateur de position, il vous permet de faire correspondre doc imbriqué spécifique:

db.users.update(
     { connections:{ 
       $elemMatch:{ 
          'TYP' : 'ZLP', 
          'fl' : 'LB', 
          'date' : ISODate("2014-05-20T00:00:00Z") 
         } 
         } 
      }, 
      { '$addToSet' : { 
          'connections.$.invit_reciv' : 
             { 'last' : 'abc'} 
          } 
      } 
) 
Questions connexes