mongodb过滤数据,数据库不存在,实体后面添加

Mongo的实体数据是在后面进行添加的,这里需要以新添加的字敦设置一个过滤条件,会导致之前所有的数据没有这个字段,无法通过过滤条件,这样就会取不到任何数据,这里我使用的是查询前不使用这个过滤条件,在查询完成的时候再从查询的结果内再次进行过滤(此次过滤和数据库中的过滤作相反的条件),过滤的结果和源数据进行差集计算,过滤出来的数据就代表的不通过的,再通过差集将源数据中不通过的数据剔除掉就成功了

下面是代码演示

        public async Task<IEnumerable<AppTaskEntity>> Search(ConditionEntity condition)
        {
            var fields = _taskField.GetFields().ToArray();
            //过滤归档数据
            //FilterDefinition<AppTaskEntity> filter = Builders<AppTaskEntity>.Filter.And(
            //    Builders<AppTaskEntity>.Filter.Eq(x => x.CreatedUId, _session.UserId),
       //下面是原来的过滤条件,这样是无法通过的
// Builders<AppTaskEntity>.Filter.Eq(x => x.IsArchive, false) //); FilterDefinition<AppTaskEntity> filter = Builders<AppTaskEntity>.Filter.Where(x => ((IEnumerable<long>)x.Fields["assignee"]).Contains(_session.UserId)); if (condition is not null) { var conditionfilter = this.ParserConditions(fields, condition); filter = Builders<AppTaskEntity>.Filter.And(filter, conditionfilter); } var result = await Search(filter, fields); var data = result.Where(x => x.IsArchive); result = result.ExceptBy(data.Select(x => x.RecordId), x => x.RecordId); return result; }

 

posted @ 2022-06-08 14:35  咳咳Pro  阅读(160)  评论(0)    收藏  举报