You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用MongoDB驱动判断List<Guid>是否包含Guid并过滤数据

实现方案

你原来写的三元表达式写法无法被MongoDB C#驱动正确解析为原生查询语句,会抛出表达式转换异常,推荐使用驱动内置的Nin(Not In)运算符实现数据库层面的过滤:

步骤1:先获取当前用户的跳过ID列表

// Skip类定义
public class Skip : BaseModel
{
    public Guid UserID { get; set; }
    public List<Guid> SkippedIDs { get; set; }
}

// 查询当前用户的跳过记录
var skippedMe = await SkipCollection.Aggregate().Match(s => s.UserID == profile.Id).FirstAsync();
// 处理空引用、空列表的边界情况
var skippedIds = skippedMe?.SkippedIDs ?? new List<Guid>();

步骤2:构造过滤条件执行聚合查询

var profileFilter = Builders<Profile>.Filter.Empty;
// 仅当有需要跳过的ID时追加过滤条件,避免无意义的查询运算
if (skippedIds.Any())
{
    profileFilter &= Builders<Profile>.Filter.Nin(p => p.Id, skippedIds);
}

// 执行聚合查询,过滤后的结果直接返回
var filteredProfiles = await ProfileCollection.Aggregate()
    .Match(profileFilter)
    // 可在这里追加其他聚合阶段,比如分页、排序、关联查询等
    .ToListAsync();

实现说明

  • Nin运算符会被驱动自动翻译为MongoDB原生的$nin查询指令,所有过滤逻辑都在数据库层面执行,不需要拉取全量Profile数据到内存再过滤,性能远高于内存过滤。
  • 提前判断跳过列表是否为空,没有需要跳过的用户时不会额外增加查询开销。

内容的提问来源于stack exchange,提问作者Rakesh Ravi G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:09:01