2017-01-02 46 views
1

我已經保存在MongoDB的以下JSON:MongoDB的:集合中搜索字符串,並只返回匹配的集合項目

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

當我要搜索特定類型的,我能做到像這個:

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

我的問題是,這個查詢返回整個JSON,而不僅僅是類型爲「8003」的元素。 有誰知道,如何通過查詢檢索類型爲「8003」的元素?

+1

你可以嘗試這樣的事情'db.geo .find({},{「features」:{$ elemMatch:{「properties」:{「TYPE」:「8003」}}}})'或者'db.geo.find({「features.properties.TYPE 「:」8003「}, {」features。$「:1 })' – Veeram

回答

2

隨着蒙戈DB 3.2版本中,你可以使用新的$filter集成算來過濾投影過程中的數組,其中包括陣列

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

在所有的比賽。如果你只是想的的first元素結果,你可以使用位置$操作如下圖所示:

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" 
     } 
    } 
    }) 

如下述網址描述請參見$ elemMatch操作的文檔

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

相關問題