2016-09-04 1 views
0

リストの同じ要素に色の青色とサイズ50のすべてのuserIDをフィルタリングするにはどうすればよいですか?ユーザ1347だけが出力されるべきである。これは$ elemMatchで行うことができれば

{ 
     "userId": "12347", 
     "settings": [ 
      { name: "SettingA", color: "blue", size: 10 }, 
      { name: "SettingB", color: "blue", size: 20 }, 
      { name: "SettingC", color: "green", size: 50 } 
     ],  
    } 
    { 
     "userId": "1347", 
     "settings": [ 
      { name: "SettingA", color: "blue", size: 10 }, 
      { name: "SettingB", color: "blue", size: 50 }, 
      { name: "SettingC", color: "green", size: 20 } 
     ]  
    } 

は、どのように私は同じリストにある必要があり、次の2つの要素を仮定して、次のクエリに含めることができます:{「rounds.round_values.decisionを」:「フォールド"}、 {" rounds.round_values.gameStage ":" PreFlop "}

このクエリを試しましたが、結果はありません。私はelemMatch deosntが予測で働くので、それを読んだ。しかし、$ elemmMatchの条件を満たすオブジェクトだけを返すように$ filterに指示するにはどうすればよいですか?

db.games.aggregate([ 
{ $match: { $and: [ 
    { Template: "PPStrategy4016" }, 
    { FinalOutcome: "Lost" }] 
}}, 
{ $elemMatch: { 
    { "rounds.round_values.decision" : "Fold"}, 
    { "rounds.round_values.gameStage" : "PreFlop"} 
    } }, 
{ 
    $group: { 
     _id: null, 
     total: { 
      $sum: "$FinalFundsChange" 
     } 
    } 
} ]) 

答えて

0

与えられた文書に続いて、クエリはこのようなものですが、以下:あなたがあなた自身のドメインに変換しに困難を持っている場合は

db.games.aggregate( 
    {$unwind : "$settings"}, 
    {$match: {"settings.color" : "blue", "settings.size" : 50}} , 
    {$group: {_id: null, total: {$sum: "$settings.size"}}}) 

、嘆願は、あなたのドメインからいくつかのサンプル文書を提供します。

+0

マッチはどのように色が青で、サイズ50は 'the same'要素の一部である必要があることを知っていますか? $ elemMatchだけではないのですか? – Nickpick

+0

'$ unwind'は、配列を展開し、その後にlikeとand query(colorとsize)の' $ match'を続けます。 '$ elemMatch'は集約には適用されません –

関連する問題