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

C# - MongoDB how to remove an item from multiple nested arrays by element value?

我在 mongo 数据库集合中有这个 JSON 结构:

{
    "Id":"123",
    "Product": "test",
    "Tags":[
        {
            "Name": "name",
            "Categories": [
                {
                    "Name": "test",
                    "OtherValue": ...
                }
            ]
        },
        {
            "Name": "name",
            "Categories": [
                {
                    "Name": "test",
                    "OtherValue": ...
                }
            ]
        }
    ]
}

有没有一种方法能够通过项目的 "Name" 属性 从所有嵌套的 "Categories" 数组中删除项目?

例如,删除所有 "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);

但是没用... 有什么想法吗?

尝试 positional all $[] 变体。

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);