2017-01-09 9 views
0

mongoDBの配列から特定の要素を削除する方法が不思議です。 は私がコレクションgeojsonsに保存されている次のようなJSONがありますmongoDBアレイからの削除

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

をそして私はproperties.TYPE8003に等しい配列features、内のすべての要素を削除したいです。 次の文で試しましたが、何も削除されません。

db.geojsons.aggregate([ 
{$match: {'features': {$elemMatch : {"properties.TYPE": '8003' }}}}, 
{$project: { 
    features: {$filter: { 
     input: '$features', 
     as: 'feature', 
     cond: {$eq: ['$$feature.properties.TYPE', '8003']} 
    }} 
}} 
]) 
.forEach(function(doc) { 
    doc.features.forEach(function(feature) { 
     db.collection.deleteOne(
      { "feature.properties.TYPE": "8003" }    
     ); 
     print("in ") 
    }); 
}); 

これは何も削除されないのはなぜですか?一致する要素を削除する方法はありますか? printステートメントが期待どおりに実行されるため、私にとってはエラーがforEachの内部にあるようです。

答えて

2

ここaggregationの必要は、あなたが$pullupdate

db.geojsons.update(
    { "type": "FeatureCollection" }, //or any matching criteria 
    {$pull: { "features": { "properties.TYPE": "8003"} }} 
); 
を使用することはできません配列から特定の要素を削除するために $pullを使用することができます
-1

この場合、一致するドキュメントを読んで修正してもう一度保存してください。そのため、必要なドキュメントに一致する検索クエリを作成するだけです。不要な配列の要素を削除してもう一度保存してください。

{ 
    "type": "FeatureCollection", 
    "features": { 
     "properties": { 
     "TYPE": "8003" 
     } 
    } 
} 

db.collection.deleteOne(
    { "feature.properties.TYPE": "8003" }    
); 

は、実際にはそれがfeature.properties.TYPEはこのようにそれと一致していることを、このような構造となっている文書を探している:

また、この文はあなたが望むものをやっていません

これはあなたが持っている構造ではありません。

1

あなたは

db.geojsons.update({}, { 
     $pull: {features: {'properties.TYPE':'8003'}} 
    }, {multi:true}) 
関連する問題