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

我想將約翰的年齡設置爲10,但失敗。我必須做更多的指定多條件。在貓鼬多個條件下更新對象的數組失敗

Babies.update({"date":date, 'babies.id': 1}, {'$set': {age:10}, function(err, response){ 
     res.json(response); 
    }) 

第一個條件是日期和所述第二條件是嬰兒的目的,在這種情況下,它的id陣列。上面的查詢沒有錯誤也沒有影響,我在哪裏做錯了?

我調試與這樣的查詢

Babies.find({'babies.id': 1}, function(err, response){ 
     res.json(response); 
    }) 

,它無法找到正確的目標,也許這就是問題所在

回答

0

使用{'$set': {'babies.$.age':10}},而不是{'$set': {age:10}}

Babies.update({"date":date, 'babies.id': 1}, 
    {'$set': { 
     'babies.$.age':10 
     } 
    }, 
function(err, response){ 
    res.json(response); 
}) 

的位置$操作者標識元件在陣列中沒有明確指定所述陣列中的元件的位置進行更新。

有關更多信息,請參閱MongoDB Positional Operator

+0

它的工作!謝謝。但如果我的日期是一個數組呢?我想更新多個日期的數據庫。 –

+0

@JamieAnderson:查看[MongoDB $ in operator](https://docs.mongodb.com/manual/reference/operator/query/in/) –