c#mongodb从多个文档中选择的数组中查找并删除一个元素
我通常是c#mongodb从多个文档中选择的数组中查找并删除一个元素,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我通常是面向文档数据库的新手,尤其是MongoDB 这个数据库是由我创建的:包含整数的几个不相交段的集合 我想根据一些条件取一项,并将其从文件中删除 例如,我尝试使用以下条件获取项目: 从[-105;17] 不是零 包含在{-104,-97,-5,0,5} 像这样 var db = client.GetDatabase("mongodbPOC"); var collection = db.GetCollection<Document>("Int"); var c
面向文档数据库
的新手,尤其是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));
var db=client.GetDatabase(“mongodbPOC”);
var collection=db.GetCollection(“Int”);
var contains=新列表{-104,-97,-5,0,5};
var result=collection.AsQueryable()
.Where(document=>17>=document.Min&&105 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 filterPull=Builders.Filter
其中(x=>x!=0&&contains.contains(x));
var update=Builders.update
.PullFilter(c=>c.值,filterPull);
然后为最小、最大条件创建另一个筛选器,此筛选器适用于您的文档并使用更新集合:
var filter = Builders<YourModel>.Filter
.Where(document => 17 >= document.Min && -105 <= document.Max);
Collection.UpdateManyAsync(filter, update);
var filter=Builders.filter
.Where(document=>17>=document.Min&&105用于删除查找解决方案并不容易,但他们在slack
中的MongoDB
论坛上帮助了我。要解决此问题,有两种方法:
使用4.2
中的agg表达式
计算位置已知或未知的值(ASIA的答案):
使用$unset
后跟$pullAll
删除所有null
如何获取已获取和已删除的值(在我的尝试中来自结果的值)?如果需要删除一个数组中的一个项,为什么建议updatemayasync
?但它不起作用,它将返回我System.aggregateeexception:“WriteEncodin”
,内部异常:无效操作异常:{document}不支持。
UpdateManayAsync表示您可以更新多个文档,它与数组无关,如果您只需要一个数组中的一项,则需要通过这种方式更改FilterPull,您唯一能得到的是查询受影响文档的数量,如果您想获得删除的值,则在我代表时您的方式是正确的将PullFilter
添加到Pull
它开始工作,但它会从数组中删除符合条件的所有元素,但我只想删除一个元素。