2017-01-24 35 views
1
{ 
    id: 1, 
    name: "venkat", 
    description: "Description", 
    address: "chennai", 
    pinCode: "600100", 
    authenticationCode: "123", 
    authenticated: false, 
    deleted: false, 
    Location: [ 
     { 
      name: "foo", 
      description: "LocationDecription", 
      parent: "parent", 
      UserAccess: [ 
       { 
        loginName: "paklon", 
        role: "role" 
       } 
      ] 
     } 
    ] 
} 

我需要更新role:"admin"有條件的地方比賽一樣id: 1Location的陣列name: "foo"Location"UserAccess.loginName": "paklon"嵌套數組,然後更新的作用。更新文件嵌套是包含多個條件

+0

看一看類似[問題](https://stackoverflow.com/questions/18573117/updating-nested-arrays-in-mongodb-via-mongo-shell) –

回答

1

根據上述描述作爲解決它請嘗試執行MongoDB中以下更新操作殼

db.collection.update({ 
    "id": 1, 
    "Location": { 
     $elemMatch: { 
      "name": "foo", 
      "UserAccess": { 
       $elemMatch: { 
        "loginName": "paklon" 
       } 
      } 
     } 
    } 
}, { 
    $set: { 
     "Location.$.UserAccess.0.role": "admin" 
    } 
}) 
+0

工作感謝很多,但一些變化:「位置。$。UserAccess.0.role」:「管理員」 – venkat

0

下面的查詢應該工作:

db.collection.update(
    {"id": 1, "Location.name": "foo", "Location.UserAccess.loginName": "paklon"}, 
    {$set: {"Location.0.UserAccess.0.role": "admin"}} 
) 

要在你需要使用positional operator「$」數組更新特定元素實際上是第一個元素的佔位符。所以它可以替換爲「0」,因爲它只允許在查詢中使用「$」一次,所以在任何情況下,在查詢結尾處都必須使用「0」。

此外看一看對應的mongodb documentation

+0

爲了我的知識,你能告訴我什麼是** 0 **在$設置 –

+0

@PrashantPokhriyal它與「$」相同,用於指定要更新的數組元素。在後臺「$」轉換爲「0」 –