c#mongodb从多个文档中选择的数组中查找并删除一个元素

问题描述 投票:0回答:1

我通常是document-oriented database,特别是MongoDB的新手。

此数据库由我创建:几个包含整数的不相交段的集合。

我想根据某些条件取一件物品,并将其从文档中删除。

例如,我尝试带条件携带该物品:

  1. 来自[-105; 17]
  2. 非零
  3. 包含在{-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));

并再次找到它进行删除,但是我确定存在一种更有利可图的方法。

c# mongodb mongodb-.net-driver
1个回答
2
投票

要从MongoDb中的数组中删除项目,您需要使用PullPullFilter,在这种情况下,您需要使用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);
© www.soinside.com 2019 - 2024. All rights reserved.