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

私はJohnの年齢を10に設定しましたが失敗しました。私はより具体的にするために複数の条件をしなければならない。mongooseで複数の条件を持つオブジェクトの配列が更新されませんでした

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

第1の条件は、日付であり、第2の条件は、赤ちゃんのオブジェクトの配列であり、この場合はidである。上記のクエリはエラーも効果もありません。どこで間違っていましたか?

私はこのクエリに

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

をやってデバッグし、それが正しいターゲットを見つけることができなかった、多分それは、代わりに{'$set': {age:10}}

答えて

0

使用{'$set': {'babies.$.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 $演算子](https://docs.mongodb.com/manual/reference/operator/query/in/)を参照してください。 –

関連する問題