Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#mongodb从多个文档中选择的数组中查找并删除一个元素_C#_Mongodb_Mongodb .net Driver - Fatal编程技术网

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

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

我想根据一些条件取一项,并将其从文件中删除

例如,我尝试使用以下条件获取项目:

  • 从[-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));
    
    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
    它开始工作,但它会从数组中删除符合条件的所有元素,但我只想删除一个元素。