2012-05-06 7 views
13

今週末mongodbとnode.jsを使いこなしています。ネストされたオブジェクトやドキュメントの更新に関するmongodbドキュメントを手に入れる際に問題があります。ネストされたオブジェクトの値をインクリメントしますか?

私は、文書は次のようになりしたコレクション..

{ 
gameName: "string", 
slug: "string", 
players: [{playerName, playerScore}, ...] 
} 

を持っている私は、プレイヤー名に基づいてplayerScoreの値をインクリメントする方法を見つけようとしています。

これは、ほとんどがNoSQLメソッドを理解していない私に下に来ると思います。私はプレイヤーのための配列を使用することについての第二の考えを持っているので、任意の入力をいただければ幸いです。

ありがとうございます!

私はあなたが次にあなたがスコアを更新することができます代わりに

 
{ 
gameName: "string", 
slug: "string", 
players: {playerName: {score: playerScore}}, 
} 

のようなあなたの文書を構造化しなければならないと信じてい

+1

構文が無効 –

答えて

18

したい構造は次のとおりです。

{ 
gameName: "string", 
slug: "string", 
players: [ { playerName: "string", playerScore: number} ] , ...] 
} 

彼の名前がJoeの場合、プレイヤーのスコアを1つ増やすには、

db.collection.update({"players.playerName":"Joe"}, { $inc : { "players.$.playerScore" : 1 } } 
+0

私はポスターの構造に混乱しています。 {playerName、playerScore}はどういう意味ですか? –

+0

私は混乱しています。プレーヤーは、各文書に{playerName: "string"、playerScore: "number"}が含まれていた文書の配列だと仮定していましたが、もちろん彼が書いたものではありません。彼が戻ってくるまで待たなければならないと思います... –

+0

はい - 申し訳ありませんが、ネストしたオブジェクトのデータ型を指定するのをスキップするのに十分な構造が暗黙のうちにあると思いました。 1つのゲームで作業するために指定したものを得ることができましたが、特定のゲームを検索しようとするとうまくいかないようです。私はこれをバックバーナーに入れました。実際の仕事は考えました:) – JackM

4

 
db.games.update({"gameName": "string"}, 
       {$inc: {"players.playerName.score": 1} 
       }) 
+0

このドキュメントでは複数のプレーヤーをどのように扱いますか?元の質問の文書構造に何が間違っていたのですか?彼はゲームで複数の選手を代表したいと思う。ゲームごとにプレーヤーごとに1つのドキュメントを提案していますか?あなたは正しいものを更新する方法を知っていますか?あなたのアップデートにgameName以外のセレクタはありません... –

+0

playerNameはここのプレースホルダです。 –

+0

各プレーヤーを表すために実際に別のフィールド_name_を使用する予定がない限り、有効なドキュメントのようには見えません。{$ inc:{"players.bobby.score":1}明確化として、このドキュメント構造から特定のゲームのプレイヤー名のリストをどのように取得しますか? –

関連する問題