Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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
MongoDB C#删除过滤的记录,不包括最后N个记录_C#_Mongodb_Mongodb Query - Fatal编程技术网

MongoDB C#删除过滤的记录,不包括最后N个记录

MongoDB C#删除过滤的记录,不包括最后N个记录,c#,mongodb,mongodb-query,C#,Mongodb,Mongodb Query,如何从不包括最后N个记录的集合中删除筛选的记录 示例:按Id筛选,然后保留最后10条记录,并删除所有其他具有该Id的记录。您可以通过先筛选行,然后创建删除筛选器,最后应用删除,如下所示。此示例使用了.net的MongoDb.Driver var listFilter = Builders<Entity>.Filter.Eq(s => s.SomeProp, X); SortDefinition<Entity> sortDefinition = Builders&

如何从不包括最后N个记录的集合中删除筛选的记录


示例:按Id筛选,然后保留最后10条记录,并删除所有其他具有该Id的记录。

您可以通过先筛选行,然后创建删除筛选器,最后应用删除,如下所示。此示例使用了.net的MongoDb.Driver

 var listFilter = Builders<Entity>.Filter.Eq(s => s.SomeProp, X);
 SortDefinition<Entity> sortDefinition = Builders<Entity>.Sort.Ascending(a => a.SomeProp);
 List<Entity> itemsAfterSkip = await this.DbSet.Find(listFilter).Sort(sortDefinition).Skip(10).Limit(10).ToListAsync();
 FilterDefinition<Entity> deleteFilter = null;
 foreach (var item in itemsAfterSkip)
 {
       if (deleteFilter == null)
       {
          deleteFilter = MongoDB.Driver.Builders<Entity>.Filter.Eq(s => s.Id, item.Id);
       }
       else
       {
           deleteFilter = deleteFilter | MongoDB.Driver.Builders<Entity>.Filter.Eq(s => s.Id, item.Id);
       }
}          

await DbSet.DeleteManyAsync(deleteFilter);
var listFilter=Builders.Filter.Eq(s=>s.SomeProp,X);
SortDefinition SortDefinition=Builders.Sort.升序(a=>a.SomeProp);
List itemsAfterSkip=wait this.DbSet.Find(listFilter).Sort(sortDefinition).Skip(10).Limit(10).toListSync();
FilterDefinition deleteFilter=null;
foreach(itemsAfterSkip中的变量项)
{
if(deleteFilter==null)
{
deleteFilter=MongoDB.Driver.Builders.Filter.Eq(s=>s.Id,item.Id);
}
其他的
{
deleteFilter=deleteFilter | MongoDB.Driver.Builders.Filter.Eq(s=>s.Id,item.Id);
}
}          
等待DbSet.deleteManasync(deleteFilter);

这是我使用MongoDB.Entities包的解决方案:

使用MongoDB.Driver;
使用MongoDB.Driver.Linq;
使用MongoDB.Entities;
使用System.Collections.Generic;
使用System.Threading.Tasks;
命名空间测试应用程序
{
公共类人员:实体
{
公共字符串名称{get;set;}
公共整数NIC{get;set;}
}
公共静态类程序
{
专用静态异步任务Main()
{
等待DB.InitAsync(“测试”);
var people=新列表();
对于(int i=1;i p.ID)
.Skip(10)
.选择(p=>p.ID)
.ToListAsync();
等待DB.deleteAncy(idsToDelete);
}
}
}
免责声明:我是图书馆的作者