2017-08-09 9 views
0

mongoのクエリを使用してJSONの下のデータを構築したり抽出したりできますか?クエリ配列の項目

JSON:

{ 
"app": [{ 
    "appFamily": "default", 
    "attributes": [{ 
      "name": "field1", 
      "value": "field1value" 
     }, 
     { 
      "name": "field2", 
      "value": "field2value" 
     }, 
     { 
      "name": "field3", 
      "value": "field3value" 
     } 
    ], 
    "nameApp": "AppName", 
}, 
     { 
    "appFamily": "default2", 
    "attributes": [{ 
      "name": "field1", 
      "value": "field1value" 
     }, 
     { 
      "name": "field2", 
      "value": "field2value" 
     }, 
     { 
      "name": "field3", 
      "value": "field3value" 
     } 
    ], 
    "nameApp": "AppName2", 
}] 

}

I名前= "フィールド2" および "nameApp" 値と共に "FIELD3" フィールドおよび値をフェッチする必要があります。

予想される出力:

{ 
{ 
    { 
     "name": "field2", 
     "value": "field2value" 
    }, { 
     "name": "field3", 
     "value": "field3value" 
    }, 
    "name": "AppName", 
}, { 

    { 
     "name": "field2", 
     "value": "field2value" 
    }, 
    { 
     "name": "field3", 
     "value": "field3value" 
    }, 
    "name": "AppName2", 

} 

}

すべてのヘルプは高く評価されるだろう。 おかげ

+0

これまでに何を試しましたか? – Eric

答えて

0

タルンは、 "アプリ" は、あなたのコレクションであると仮定すると、あなたはこのような$または$ elemMatchlogical operators、とを見つけるを使用して、この電話をかけることができます:

db.app.find(
    { $or: [ 
     { attributes: { $elemMatch: { name: 'field2' } }}, 
     { attributes: { $elemMatch: { name: 'field3' } }} 
    ] } 
); 

それかもしれませんあなたがリストアップした予想される結果を返すのが難しい(または不可能な)のではないか分かりません。 属性が配列に返されても問題ありませんか? 「アプリ」は、文書がある場合

db.app.find(
    { $or: [ 
     { attributes: { $elemMatch: { name: 'field2' } }}, 
     { attributes: { $elemMatch: { name: 'field3' } }} 
     ] 
    }, { attributes: 1, nameApp: 1} 
); 

は、あなたが巣のクエリする必要があります:

もしそうなら、あなたは、フィールドの名前とクエリlike thisで1を含むことによって、明示的にそれを行うことができます上に別の文字で$ elemMatch演算子 - $ elemMatchは配列の要素に一致させるものです。

関連する問題