我通常是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);
然后针对“最小”,“最大”条件创建另一个过滤器,该过滤器适用于您的文档并使用“更新集合”:
var filter = Builders<YourModel>.Filter
.Where(document => 17 >= document.Min && -105 <= document.Max);
Collection.UpdateManyAsync(filter, update);