2017-01-02 6 views
1

をコレクション内の文字列を検索し、唯一のマッチしたコレクションアイテムを返します。のMongoDB:私はMongoDBの中に保存され、次のJSONを持って

{ 
    "type": "FeatureCollection", 
    "features": [ 
    { 
     "type": "Feature", 
     "properties": { 
     "ID": "1753242", 
     "TYPE": "8003" 
     } 
    }, 
    { 
     "type": "Feature", 
     "properties": { 
     "ID": "4823034", 
     "TYPE": "7005" 
     } 
    } 
    ] 
} 

私は、特定のタイプを検索したい場合は、私は次のようにそれを行うことができますこれは:

db.geo.find({"features.properties.TYPE":"8003"}) 

私の問題は、このクエリはTYPE "8003"の要素だけでなく、json全体を返すということです。 誰もが知っている、クエリでTYPE "8003"の要素だけを取り出す方法はありますか?モンゴDB 3.2リリースで

+1

あなたはこの 'db.geoような何かを試すことができます。あるいは、 'db.geo.find({" features.properties.TYPE){{{{{{{}}}} ":" 8003 "}、 {" features。$ ":1 }) ' – Veeram

答えて

2

、あなたはあなただけのfirst要素をしたい場合は、アレイ

db.test.aggregate([ 
{$match: {'features': {$elemMatch : {"properties.TYPE": '8003' }}}, 
{$project: { 
    features: {$filter: { 
     input: '$features', 
     as: 'feature', 
     cond: {$eq: ['$$feature.properties.TYPE', '8003']} 
    }} 
}} 
]); 

内のすべての試合が含まれて投写中の配列を、フィルタリングする新しい$filter集計演算子を使用することができます

db.geo.find({ "features.properties.TYPE":"8003"}, { "features.$": 1 }) 
+0

@PhilippHellmayr:問題が一致するクエリである可能性があります、私は上記の私の答えを更新しました、それが動作していることを確認し、私に知らせてください。 – superUser

+0

ありがとう、それは動作します! –

+0

クール。お役に立てて嬉しいです :) – superUser

1

$ elemMatchオペレータが戻る最初の要素だけの試合:結果、あなたは以下のような位置$演算子を使用することができますクエリの結果に$ elemMatchの条件があります。

次のクエリを実行してみてください

db.geo.find({ 
    features: { 
     $elemMatch: { 
      "properties.TYPE": "8003" 
     } 
    } 
    }, { 
    features: { 
     $elemMatch: { 
      "properties.TYPE": "8003" 
     } 
    } 
    }) 

下記のURLに記載され$ elemMatchオペレータのドキュメントを参照してください

https://docs.mongodb.com/manual/reference/operator/projection/elemMatch/

関連する問題