2016-03-23 35 views
1

ドキュメントに埋め込まれているすべてのドキュメントを更新したいのですが、どうすればいいですか?あなたは、次のコマンド埋め込みドキュメントの更新埋め込み

.update({'sites':{$elemMatch:{'status':true}}},{$set:{'sites.$.status': false}},{multi:true}) 

を実行したときにのみ、最初に見つかった埋め込まれた文書が

文書の例を更新しているため:

{ 
    '_id': 1, 
    sites: [ 

    {'status':true,'url':'http://google.com'}, 
    {'status':true,'url':'https://university.mongodb.com'}, 
    {'status':true,'url':'https://docs.mongodb.org'} 
]} 
+1

現在のところ不可能です。ここで回避策を読むことができます:[mongodbの複数の配列要素を更新する方法](http://stackoverflow.com/questions/4669178/how-to-update-multiple-array-elements-in-mongodb)。 MongoDBには、その機能のための公開された問題があります:https://jira.mongodb.org/browse/SERVER-1243 – Bonanza

答えて

1

これは可能ではない、あなたが得ることができる閉じは更新することです要素全体例:

db.test.update({ 
    _id: 1 
}, 
{ 
    $set: { 
     sites: [ 
      {'status':true,'url':'http://1.example.com'}, 
      {'status':true,'url':'http://2.example.com'}, 
      {'status':true,'url':'http://3.example.com'}, 
     ] 
    } 
}) 
+0

これはまさに私が[mongodbの複数の配列要素を更新する方法](http ://stackoverflow.com/a/33193231/5031275)は、人々に**警告**をしないよう警告しています。その習慣は、更新トラフィックがないデータ変換では受け入れられるかもしれませんが、あなたが思っていた配列メンバが更新を発行した時点で唯一存在していたということは、メンバー、または実際には同じ順序で(重要であることを命ずるべきであり、別の点でもカバーするべきである)。あなたはこれを自分で読むべきです。 –

関連する問題