我想知道如何从mongoDB中的数组中删除某些元素。
我在集合geojsons
中保存了以下json:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"ID": "1753242",
"TYPE": "8003"
}
},
{
"type": "Feature",
"properties": {
"ID": "4823034",
"TYPE": "7005"
}
},
{
"type": "Feature",
"properties": {
"ID": "4823034",
"TYPE": "8003"
}
}
]
}
我想删除数组features
中的每个元素,其中properties.TYPE
等于8003
。
我用以下语句尝试了它,但它没有删除任何内容。
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 ")
});
});
有谁知道,为什么这不会删除任何内容或如何删除匹配的元素?
对我来说,似乎失败在forEach
内,因为print语句按预期执行。
答案 0 :(得分:2)
此处不需要aggregation
,您可以使用$pull的update
db.geojsons.update(
{ "type": "FeatureCollection" }, //or any matching criteria
{$pull: { "features": { "properties.TYPE": "8003"} }}
);
答案 1 :(得分:1)
您可以使用$pull
删除数组中的特定元素
db.geojsons.update({}, {
$pull: {features: {'properties.TYPE':'8003'}}
}, {multi:true})
答案 2 :(得分:-1)
我想在这种情况下,正确的解决方案是读取匹配的文档,再次修改并保存。因此,只需创建一个与您想要的文档相匹配的搜索查询:删除数组中您不想要的元素并再次保存。
此外,这句话没有做你想要的:
db.collection.deleteOne(
{ "feature.properties.TYPE": "8003" }
);
实际上它正在搜索一个文件,其结构使得feature.properties.TYPE像这样匹配:
{
"type": "FeatureCollection",
"features": {
"properties": {
"TYPE": "8003"
}
}
}
这绝对不是你的结构。