2013-10-21 95 views
0

我對mongodb非常陌生,在更新操作中遇到了一些麻煩。下面是文檔:Mongodb在子陣列內更新操作

{ 
    "username" : "amitverma", 
    "notifications" : { 
     "notification_add_friend" : [ 
      { 
       "sender" : "macbook", 
       "action" : "", 
       "type" : "", 
       "objectType" : "request", 
       "objectUrl" : "", 
       "isUnread" : true 
      }, 
      { 
       "sender" : "safari", 
       "action" : "", 
       "type" : "", 
       "objectType" : "request", 
       "objectUrl" : "", 
       "isUnread" : true 
      }, 
      { 
       "sender" : "chrome", 
       "action" : "", 
       "type" : "", 
       "objectType" : "request", 
       "objectUrl" : "", 
       "isUnread" : true 
      } 
     ] 
    }, 
    "_id" : ObjectId("526598c86f45240000000001") 
} 
{ 
    "username" : "macbook", 
    "notifications" : { 
     "notification_add_friend" : [ 
      { 
       "sender" : "amitverma", 
       "action" : "", 
       "type" : "", 
       "objectType" : "a_r", 
       "objectUrl" : "", 
       "isUnread" : true 
      } 
     ] 
    }, 
    "_id" : ObjectId("526598d06f45240000000002") 
} 

我想與{"sender":"safari"}"username":"amitverma" 我曾嘗試$ elemMatch與$集刪除子陣列,但就是無法得到正確的查詢。

+0

如果我正確理解你,你想從第一個文檔中刪除整個'notification_add_friend'數組? * P.S。其實這裏有兩個文件* – Shad

+0

我*認爲* OP意味着從陣列中刪除「safari」請求,但措辭有點奇怪。如果打算刪除整個數組,我將刪除/更改我的答案。 – numbers1311407

回答

2

你不想在這裏使用$set,但$pullsee docs),而你使用$elemMatch進一步指定查詢,你不需要。

下會拉所有{"sender": "safari"}從文檔的子陣列匹配{"username": "amitverma"}

db.yourcollection.update({"username": "amitverma"}, { 
    $pull: {"notifications.notifications_add_friend": {"sender": "safari"}} 
}) 

至於您的評論添加好友通知,如果您想更新您的特定元素使用$set組合與$elemMatchpositional operator $。對於你的例子,如:

db.yourcollection.update({ 
    "username": "amitverma", 
    "notifications.notifications_add_friend": { 
    $elemMatch: {"sender": "safari"} 
    } 
}, { 
    $set: { 
    "notifications.notifications_add_friend.$.isUnread": false 
    } 
}) 
+0

如果我想改變一個特定的屬性,比如'isUnread'爲false,那我該怎麼做? – amit

+0

用於更改isUnread值的更新解決方案不起作用。 – amit

+0

它應該工作,你得到一個錯誤,或者它只是沒有更新?你在用什麼版本的mongo? – numbers1311407