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