2016-12-28 58 views
0

我在我的數據庫格式MongoDB中找到對象的數組和更新

[{ 
    "birth-date": "18/12/2010", 
    "babies": [{ 
    "id":1, 
    "name": "James", 
    "age": 8, 
    }, { 
    "id":2, 
    "name": "John", 
    "age": 4, 
    }] 
}] 

所以我想更新詹姆斯的名字到別的東西。我做

Babies.update({"birth-date":date, 'babies.id': 1}, {'$set': {'babies.$.name':"something else"}}, function(err, response){ 
     res.json(response); 
    }) 

它返回ok:0東西是錯誤的第二選擇('babies.id': 1)

+0

我不知道貓鼬,但在蒙戈外殼'Babies.update ({「birth-date」,'babies.id':1},...'會因爲出生日期的需要而給出錯誤:這是屬性需要的一個鍵(例如'嬰兒。更新({「birth-date」:「18/12/2010」,'babies.id':1},...' – RafaelCaballero

+0

@RafaelCaballero更新了我的答案,這只是錯字 –

+0

你可以嘗試用'$ set'取代設置的部分:{'嬰兒。$。name':「別的東西」}? – Veeram

回答

-1

要基於某些陣列屬性相匹配的文件,你需要$ elemMatch

Babies 
    .update({ babies: {$elemMatch:{id : 1}} }, {'$set': {name:"something else"}, function(err, response){ 
     res.json(response); 
    }) 

檢查了這一點: https://docs.mongodb.com/v3.2/reference/operator/query/elemMatch/

+0

這只是單一的條件。我需要日期和寶貝ID。 –

+0

與任何其他查詢一樣,您可以輕鬆添加任意數量的條件。 嬰兒 .update({嬰兒:{$ elemMatch:{id:1}},'birth-date':「18/12/2010」},{'$ set':{name:「something else」} ,函數(err,response){ res.json(response); }) –

+0

$ elemMatch在這裏不需要。它在您需要幾個條件時使用。如果你需要的只是平等,就像你的情況一樣,''babies.id':1'是完美的,事實上,我已經在mongo'db.collection.update({「birth-date」:「18/12/2010「,」babies.id「:1},{'$ set':{name:'something'}})'並且它可以正常工作,包含您的文檔的'collection'。 – RafaelCaballero