2014-05-14 29 views
0

我有一个集合

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", 

     } 

    ] 
} 

我进行更新accoding迄今在connections.but错误的嵌套记录在我的情况下被更新。

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

实际结果我得到。

{ 
     "_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", 

      } 

     ] 
    } 

结果我想到

{ 
    "_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", 

     } 

    ] 
} 

请帮助我了解什么是当前查询发生的,什么是错的。

回答

1

您应该使用$ elemMatch与位置运算符,它可以让你满足特定嵌套DOC:

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