2015-04-28 51 views
0

我想更改MongoDB NoSQL數據集中的數組內的元素的字段。但在更新時,我不知道該元素由於並行化而具有哪個索引。我所知道的是一些存儲在該元素內的值。MongoDB「更新在哪裏」就像在MySQL中,但爲陣列

我的數據

course = { 
    _id: ObjectId("some-id"), 
    someOtherFields: { 
     ... 
    } 
    myList: [ 
     { 
      uid: ObjectId("some-user-id-1"), 
      someField: "value to change", 
      ... 
     }, 
     ... 
    ] 
} 

查詢顯示所有 「課程」 S myList中的條目與特定的UID樣子

我的查詢

db.courses.find(
    {"myList": {"$elemMatch":{"uid":"my-uid-to-find"}}}, 
    {"_id":true, "someOtherField":true, "myList.$":true} 
) 

問題

問題是我怎樣才能更新只有這一行與查詢沒有 知道它的索引。

我想改變someFieldmyList.$其中 myList.$.uid = someIdToFind

+1

你在自己的數據定義'mailinglist'? – Yogesh

+0

哎呀,對不起,我的myList – Tobi

回答

1

在這種情況下,你首先應該把給出的值的所有匹配標準在你find語句中使用elemMatch作爲同樣喜歡更新查詢。

然後使用mongo positional operator $在更新,以便如下更新查詢:

db.collectionName.update({ 
    "myList": { 
    "$elemMatch": { 
     "uid": "your given ObjectId" // set here ObjectId to find matching element in array 
    } 
    } 
}, { 
    "$set": { 
    "myList.$.someField": "your updated value" // use mongo postional operator "$" to iterate over array 
    } 
})