2017-12-26 5 views
0

私はうまく動作するこのようなクエリを持っています。未知のキーの下に埋め込み値を見つけるためのMongodbクエリ

db.getCollection('device').find({"device_profile.XC.grade":"i"}) 

と私はデバイスプロファイルの後に任意のキーの下の値を取得するクエリを必要とするこの

db.getCollection('device').find({"device_profile.XC.grade":"i"}) 

のような別のクエリ。すなわち、

db.getCollection( 'デバイス')のようなものを見つける。({ "device_profileを*グレード。。": "I"})*はXA、XC、ABことができ

または任意のキー..

私は試しましたdb.getCollection('device').find({"device_profile.$.grade":"i"})どんな結果も得られていません。

これを行う方法?

答えて

0

$と入力してください。はフィルタリングのカスタムJavaScriptを評価できます。

​​

下では、この我々持っている単一の文書、我々はそれが私が 'に等しいグレードのものを見つけるためにキーをだ繰り返すことができるように

0

あなたが指定した名前の属性にキーを割り当てることにより、設計を改善し、ことができより速いクエリのために等級フィールドにインデックスを追加するようになりました。 (優先)

何かオプション以下

db.getCollection('device').find({"device_profile.grade":"i"}‌​). 

のようなクエリ

device_profile:[{key:"XC", grade":"i"},{key:"XA", grade":"e"} ] 

のようなあなたが構造を変更することはできません。

$objectToArrayグレード配列に渡された入力値が含まれている場合は、$in式の後にブール値を出力するために、指定されたドキュメントをキー値ペアに変換します。定期的なクエリで集約式の使用を可能にする$exprとクエリ以下3.6使用するため

var criteria = 
{ 
    "$let": { 
    "vars": { 
     "device_profile": { 
     "$objectToArray": "$device_profile" 
     } 
    }, 
    "in": { 
     "$in": [ 
     "i", 
     "$$device_profile.v.grade" 
     ] 
    } 
    } 
} 

。集計クエリ内のとき、他の試合$$ PRUNE文書KEEPを$$に$redactオペレータを持つクエリ以下の3.4を使用するために

db.collecion_name.find({"$expr":criteria}) 

db.collection_name.aggregate([ 
    { 
    "$redact": { 
     "$cond": [ 
     criteria, 
     "$$KEEP", 
     "$$PRUNE" 
     ] 
    } 
    } 
]) 

他のすべてのバージョンについてモンゴから文書を取得し、JavaScriptをオペレータ受け入れ、クライアント側のマッチング/使用$を行います。

関連する問題