c# mongodb 从多个文档中选择的数组中查找并删除一个元素
c# mongodb Find and remove one element from an array selected among several documents
总的来说,我是 document-oriented database
方面的新手,尤其是 MongoDB
方面的新手。
这个数据库是我创建的:几个包含整数的不相交段的集合。
我想根据某些条件取一个项目并将其从文档中删除。
比如我试过带条件的物品:
- 从[-105; 17]
- 不为零
- 包含在 {-104、-97、-5、0、5}
像这样
var db = client.GetDatabase("mongodbPOC");
var collection = db.GetCollection<Document>("Int");
var contains = new List<int> { -104, -97, -5, 0, 5 };
var result = collection.AsQueryable()
.Where(document => 17 >= document.Min && -105 <= document.Max)
.SelectMany(document => document.Values)
.First(val => val != 0 && contains.Contains(val));
并再次找到它以进行删除,但我确信存在一种更有利可图的方法。
要从 MongoDb
中的数组中删除项目,您需要使用 Pull
或 PullFilter
,在您的情况下,您需要使用 PullFilter
,如下所示:
var filterPull = Builders<int>.Filter
.Where(x => x != 0 && contains.Contains(x));
var update = Builders<YourModel>.Update
.PullFilter(c => c.Values, filterPull);
然后为 Min、Max 条件创建另一个过滤器,此过滤器适用于您的文档并使用 Update Collection:
var filter = Builders<YourModel>.Filter
.Where(document => 17 >= document.Min && -105 <= document.Max);
Collection.UpdateManyAsync(filter, update);
对于删除,找到解决方案并不容易,但他们在 slack
的 MongoDB
论坛上帮助了我。解决这个问题有两种方法:
- 在
4.2
中使用 agg expressions
获取位置已知或未知的值(Asya 的回答):https://jira.mongodb.org/browse/SERVER-1014?focusedCommentId=2305681&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-2305681
- 使用
$unset
然后 $pullAll
删除所有 null
的
总的来说,我是 document-oriented database
方面的新手,尤其是 MongoDB
方面的新手。
这个数据库是我创建的:几个包含整数的不相交段的集合。
我想根据某些条件取一个项目并将其从文档中删除。
比如我试过带条件的物品:
- 从[-105; 17]
- 不为零
- 包含在 {-104、-97、-5、0、5}
像这样
var db = client.GetDatabase("mongodbPOC");
var collection = db.GetCollection<Document>("Int");
var contains = new List<int> { -104, -97, -5, 0, 5 };
var result = collection.AsQueryable()
.Where(document => 17 >= document.Min && -105 <= document.Max)
.SelectMany(document => document.Values)
.First(val => val != 0 && contains.Contains(val));
并再次找到它以进行删除,但我确信存在一种更有利可图的方法。
要从 MongoDb
中的数组中删除项目,您需要使用 Pull
或 PullFilter
,在您的情况下,您需要使用 PullFilter
,如下所示:
var filterPull = Builders<int>.Filter
.Where(x => x != 0 && contains.Contains(x));
var update = Builders<YourModel>.Update
.PullFilter(c => c.Values, filterPull);
然后为 Min、Max 条件创建另一个过滤器,此过滤器适用于您的文档并使用 Update Collection:
var filter = Builders<YourModel>.Filter
.Where(document => 17 >= document.Min && -105 <= document.Max);
Collection.UpdateManyAsync(filter, update);
对于删除,找到解决方案并不容易,但他们在 slack
的 MongoDB
论坛上帮助了我。解决这个问题有两种方法:
- 在
4.2
中使用agg expressions
获取位置已知或未知的值(Asya 的回答):https://jira.mongodb.org/browse/SERVER-1014?focusedCommentId=2305681&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-2305681 - 使用
$unset
然后$pullAll
删除所有null
的