2017-02-01 7 views
0

を使用してのMongoDBのArrayの埋め込まれた文書のフィールド値を更新するために、私は私の文書には、以下の構造を有する:どのようにJavaのドライバ

{ 
    "_id": ObjectId("5891a85bccaad513a844308f"), 
    "sites": [ 
    { 
     "site": "site1", 
     "url": "site1.com", 
     "status": 1, 
    }, 
    { 
     "site": "site2", 
     "url": "site2.com", 
     "status": 1, 
    }, 
    { 
     "site": "site3", 
     "url": "site3.com", 
     "status": 1, 
    } 
    ] 
} 

その後、私はUIにすべてのサイトをロードします。私は次のようなイメージを変更してUpdateを押します。私は "site3"を削除しました。 enter image description here 私の構造は次のように更新する必要があります。サイト3のステータスは0に更新する必要があります

{ 
    "_id": ObjectId("5891a85bccaad513a844308f"), 
    "sites": [ 
    { 
     "site": "site1", 
     "url": "site1.com", 
     "status": 1, 
    }, 
    { 
     "site": "site2", 
     "url": "site2.com", 
     "status": 1, 
    }, 
    { 
     "site": "site3", 
     "url": "site3.com", 
     "status": 0, 
    } 
    ] 
} 

どうすればこの問題を解決できますか?

答えて

1

位置$更新を利用できます。

クエリフィルタは、配列内の一致siteを見つけ、更新部分はstatusを一致する要素に設定します。

collection.updateOne(new Document("_id", new ObjectId("5891a85bccaad513a844308f")).append("sites.site", "site3"), Updates.set("sites.$.status", 0)); 
+0

しかし、問題はどのようにサイトがリストから削除されたかを見つけることです。 site2とsite3が削除され、そのサイトを更新する方法を想像してみてください。 –

+0

私はあなたがクライアントのコードでそれを追跡する必要があると思います。それはそう簡単になります。 – Veeram