[英]c# mongodb Find and remove one element from an array selected among several documents
一般来说,我是document-oriented database
的新手,尤其是MongoDB
。
这个数据库是我创建的:几个包含整数的不相交段的集合。
我想根据某些条件取一个项目并将其从文档中删除。
例如,我尝试带条件获取项目:
像这样
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
的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.