2017-05-15 12 views
0

mongo dbを新しくしました。私は年齢キーに基づいてレコードを取得しようとしていますが、クエリは常に空の結果を返します。ここでオブジェクトキーphpでmongo dbからデータを取得する方法

は、私は年齢の値に応じてデータを取得したいJSON文字列

"age_premium": { 
    "age": {  
    "65": { 
     "Plan A": "136.24", 
     "Plan B": "140.33", 
     "Plan F": "172.72", 
     "Plan G": "142.95", 
     "Plan N": "117.45" 
    }, 
    "66": { 
    "Plan A": "136.24", 
    "Plan B": "140.33", 
    "Plan F": "172.72", 
    "Plan G": "142.95", 
    "Plan N": "117.45" 
    }}} 

です。

は、私は今あなたが $whereを使用することができるため、このクエリ

$collection->find(array('age_premium.age'=>'65')); 
+0

'age_premium.age'はオブジェクトであり、文字列ではありません。 v3.6では、集約フレームワーク内で '$ objectToArray'を使用することができます。それまでは、ETLツールであるMapReduceが唯一のオプションであり、運用クエリには推奨されません。また、文字列を比較するときには型が重要であることに注意してください。 '8'> '70'> '120'。 –

+0

@AlexBlexだから今の解決策は何ですか? – Tuhin

+0

スキーマを変更して、 'age'が配列であり、埋め込みドキュメントの年齢が数値になるようにします。 –

答えて

0

を使用してフェッチしようとしたjavascriptの評価:

age_premium.ageのすべてのプロパティをループ
$collection->find(array('$where'=>'for(var i in this.age_premium.age){if(i == 65){return true}} return false')); 

は、型変換を行い、その値を比較します各ドキュメントの非常に遅く、索引を使用できません。クイックパッチとしては大丈夫かもしれませんが、この種のクエリーをサポートするためには、ドキュメントの構造を変更する必要があります。

関連する問題