C-MongoDB如何按元素值从多个嵌套数组中删除项?

C-MongoDB如何按元素值从多个嵌套数组中删除项?,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我在mongo db集合中有这个JSON结构: { "Id":"123", "Product": "test", "Tags":[ { "Name": "name", "Categories": [ { "Name": "test", "OtherValue": ...

我在mongo db集合中有这个JSON结构:

{
    "Id":"123",
    "Product": "test",
    "Tags":[
        {
            "Name": "name",
            "Categories": [
                {
                    "Name": "test",
                    "OtherValue": ...
                }
            ]
        },
        {
            "Name": "name",
            "Categories": [
                {
                    "Name": "test",
                    "OtherValue": ...
                }
            ]
        }
    ]
}
有没有办法通过项的名称属性从所有嵌套类别数组中删除项

例如,删除Name==test的所有类别

我试过这样的方法:

var filter = Builders<Item>.Filter.Eq(item => item.Id, "123");
var update = Builders<Item>.Update.Pull("Tags.$[].Categories[i]", "test");

var arrayFilters = new List<ArrayFilterDefinition>
{
    new JsonArrayFilterDefinition<Setup>("{\"i.Name\": \"test\"}")
};

var updateOptions = new UpdateOptions { ArrayFilters = arrayFilters };
await Collection.UpdateOneAsync(filter, update, updateOptions);
但它不起作用。。。 有什么想法吗?

试试变体


使用微调:var update=Builders.update.pullfilterttags.$[].Categories,Builders.Filter.EqName,test;只需将[]从Categories[]删除到Categories即可
var filter = Builders<Item>.Filter.Eq(item => item.Id, "123");
var update = Builders<Item>.Update.PullFilter("Tags.$[].Categories", Builders<BsonDocument>.Filter.Eq("Name", "test"));

await Collection.UpdateOneAsync(filter, update);