2016-12-30 22 views
0

私は以下のサンプルJSONを持っています。リスト上のMongo DBクエリ<Map <String、Map <String、String >>>

{ 
     "subscriber": { 
      "id": "123", 
      "custom_field1": "0", 
      "custom_field2": "0" 
     }, 
     "subscriptions": [{ 
      "12": { 
       "subs_id": "111", 
       "state": "5", 
      } 
     }, { 
      "13": { 
       "subs_id": "222", 
       "state": "8", 
      }, { 
      "14": { 
       "subs_id": "111", 
       "state": "8", 
      } 
     }] 
    } 

Iは

db.testTable.find({ "subscriber.id": "123"})のようMongoのDBで照会することができています。

また、上記のクエリを使用しても結果を得ることができます。

今私は「subs_id」=「111」で構成さサブスクリプションアレイ上のデータをフィルタリングします。

Iはdb.testTable.find({ "subscriptions.subs_id": "111"})

以下のように試みました。

これは私に結果を与えていません。どのようにこれを行う方法を私に示唆することができます。

注:私はその一覧で<地図<文字列、地図<文字列、文字列>>>フォーマットと私は、Mapオブジェクトの値の部分に照会していますことを理解しています。しかし、結果を取得する方法を手がかりにすることはできません。

+0

あなたが埋め込まれた文書のリストにそれを変更することにより、サブスクリプションを固定しようとすべきであることを明確にしたいと思います。 '{{"subs_key": "12"、 "subs_id": "111"、 "state": "5"、 } 'あなたはサブスクリプションを' db.testTable.find({ "123"、 "subscriptions.subs_id": "111"}、{"subscriptions。$":1); ' – Veeram

+0

はサガールの意見に同意しています。もしmongoがワイルドカードフィールド名の検索をするならば、別の話がありますが、今はあなたの文書がおそらく調整する必要があります。なぜあなたのドキュメントに数字でラベルを付けるのですか?理由はありますか? –

+0

ありがとう。しかし、私はそれがクライアント側から来ている入力データ形式を変更することはできません。指定されたフォーマットでデータをフィルタリングするだけです。データを調整しないと、どんな提案も簡単に行えます。 – Manindar

答えて

2

多分あなたは

db.testTable.find({$where : "for(var i in this.subscriptions){for(var j in this.subscriptions[i]){if(this.subscriptions[i][j]['subs_id'] && this.subscriptions[i][j]['subs_id'] === '111'){return true;}}}"}); 

が私を罵倒しないでくださいどこ$を使用することができ、DBの設計は芋故障しています。効率的で快適なクエリを得るために、DB構造を再考する必要があるかもしれません。

$whereでもインデックスを使用していないので、基本的にすべての文書上でスキャンしているため、比較的遅いです。

また 私は、サブスクリプション・フィールドは基本的にList<Map<String,Map<String,String>>>

+0

ありがとう、そのうまく動作します。 JAVAコードを使用して同様のクエリを実装するためのリンクを提案できますか? – Manindar

+0

さて、すべてのJavaドライバは$をサポートしています。どこで使用するかはあなた次第です。あなたがspring-data-mongodbを使いたいのであれば私は簡単な方法を見つけることができませんでしたが、StringでBasicQueryを作成することができます。例として行番号223を参照してください:https://github.com/spring-projects/spring-data-mongodb/blob/master/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/リポジトリ/クエリ/ StringBasedMongoQueryUnitTests.java –

関連する問題