构建过滤条件的问题 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 的方式进行转换数据

浙公网安备 33010602011771号