2012-05-13 2 views
1

のすべてのキーの値を増やすのに役立つ必要があります。内部のキーの名前を知らなくても助かります。

> db.conversations.findOne() 

{ 
"_id" : ObjectId("4faf74b238ba278704000000"), 
"participants" : { 
    "4f81eab338ba27c011000001" : NumberLong(2), 
    "4f78497938ba27bf11000002" : NumberLong(2) 
} 
} 

私はあなたがあなたのスキーマを再設計する必要があります...無駄に

$mongodb->conversations->update(array('_id' => new \MongoId($objectId)), array('$inc' => array('participants' => 1))); 

ようなもので

答えて

2

を試してみました。 「ランダムなキー名」を持つことは決して良い考えではありません。 MongoDBはスキーマレスですが、依然としてキー名を定義する必要があることを意味します。

{ 
    "_id" : ObjectId("4faf74b238ba278704000000"), 
    "participants" : [ 
     { _id: "4f81eab338ba27c011000001", count: NumberLong(2) }, 
     { _id: "4f78497938ba27bf11000002", count: NumberLong(2) } 
    ] 
} 

悲しいことに、1つのコマンドですべての埋め込みカウントを更新することはできません。

  • クエリ文書
  • 更新クライアント側のすべてのカウント
  • 店舗:まだすべてのもの、あなたのすべきを更新するためにhttps://jira.mongodb.org/browse/SERVER-1243

    :そのために開いている機能要求は現在あり再度文書

競合状態を防ぐために、"Compare and Swap"とそれ以降の段落を参照してください。

+0

私はあなたの例に従ってスキーマとすべてのメソッドを更新しましたが、エラーメッセージ "文字列フィールド名[count]を使用して配列に追加できません"という上記のコードを実行して更新を行うと、 – Sputnik

+0

あなたはそうです。このためのJiraチケットがあります:https://jira.mongodb.org/browse/SERVER-1243投票してください!私は私の答えを更新しました。 – Derick

0

現在のバージョンのMongoDBでは、1回の移動ですべてのネストされた要素を更新することはできません。だから私は "foreach {}"を使用するアドバイスをすることができます。

読むrealtedトピック:私はこの機能は次のバージョンで実装されることを願っていますHow to Update Multiple Array Elements in mongodb

関連する問題