构建过滤条件的问题 Builders 及解决情况

下面是之前的问题
我想通过 FilterDefinitionBuilder<TDocument>类来构建我的过滤条件,但碍于我的数据结构的问题,构造出的条件一直报错,请问我该如何成功构造出我想要的条件
下面是我想要构造的条件 completedStatus 是一个Id集合
filter = Builders<AppTaskEntity>.Filter.And(filter,
Builders<AppTaskEntity>.Filter.Nin(x =>x.Fields["status"], completedStatus));
filter = Builders<AppTaskEntity>.Filter.And(filter,
Builders<AppTaskEntity>.Filter.Where(x => (x.Fields["title"]).Contains(kw)));
下面是我的数据结构,数据是从Mongodb中获取的
"fields": {
"no": 1,
"title": "1",
"type": [],
"status": [
{
"id": "1494964866400784384",
"name": "未开始",
"type": "pending",
"color": "#56abfb"
}
],

上面的问题其实都可以解决,只是当是我的思路出现了一些问题,我误把返回的数据当成数据库的数据结构了,而where中的条件无法成功是因为我的代码优先级除了问题,解决方案是添加圆括号,

下面是解决后的代码

            var completedStatus = await _taskStatus.Value.SearchAsync(x => x.Type == TaskStatusType.pending);
            var completed_ids = completedStatus.Select(x => x.Id);
            ////移除已完成的状态
            filter = Builders<AppTaskEntity>.Filter.And(filter,
                Builders<AppTaskEntity>.Filter.AnyNin(x => (x.Fields["status"] as long[]), completed_ids)
                );

            //CompanyMemberEntity 企业成员
            if (!string.IsNullOrEmpty(kw))
            {
                filter = Builders<AppTaskEntity>.Filter.And(filter,
                    Builders<AppTaskEntity>.Filter.Where(x => (x.Fields["title"] as string)!.Contains(kw)));
            }

上面还有一个疑点暂时没有得到解答,就是过滤器过滤的条件是in,返回的结果和我理解的Nin结果相同,我理解的这两个数据是相反的

总结问题:主要是因为数据结构,和优先级的问题 ,上面还有问题,无法使用函数,比如to string等,只能通过as 的方式进行转换数据

posted @ 2022-05-27 10:20  咳咳Pro  阅读(165)  评论(0)    收藏  举报