MongoDB查询数据效率慢

SDHU 2019-03-01 08:40:45
库中一共有四个实体,通过类似ef的框架关联起来,主要的其中3个实体TStudy,TSeries,TPatient如下:
这是TStudy
  [BsonId]
public string InstanceUID { get; set; }

[BsonElement("StudyID")]
public string StudyID { get; set; }

[BsonElement("StudyDate")]
public DateTime? StudyDate { get; set; }

[BsonElement("StudyTime")]
public DateTime? StudyTime { get; set; }

[BsonElement("Modility")]
public string Modility { get; set; }

[BsonElement("StudyDescription")]
public string StudyDescription { get; set; }

[BsonElement("IsCompleted")]
public int IsCompleted { get; set; }

[BsonElement("Patient")]
public TPatient Patient { get; set; }

[BsonElement("LockedState")]
public string LockedState { get; set; }

[BsonElement("Series")]
List<TSeries> _series;


这是Tseries:

[BsonIgnore]
public const string TBName = "tseries";

[BsonId]
public string InstanceUID { get; set; }

[BsonElement("SeriesNumber")]
public string SeriesNumber { get; set; }

[BsonElement("SeriesType")]
public string SeriesType { get; set; }

[BsonElement("ImageCount")]
public ushort ImageCount { get; set; }

[BsonElement("SeriesDescription")]
public string SeriesDescription { get; set; }

[BsonElement("ProtocolName")]
public string ProtocolName { get; set; }

[BsonElement("BodyPartExamined")]
public string BodyPartExamined { get; set; }

[BsonElement("StudyInstanceUID")]
public string StudyInstanceUID { get; set; }

[BsonElement("LockedState")]
public string LockedState { get; set; }

[BsonElement("Contrast")]
public bool? Contrast { get; set; }

[BsonElement("IsPreview")]
public bool? IsPreview { get; set; }

[BsonElement("ScanSeriesUID")]
public string ScanSeriesUID { get; set; }

[BsonElement("PacsAddress")]
public string PacsAddress { get; set; }

[BsonElement("PacsAE")]
public string PacsAE { get; set; }

[BsonElement("PrinterAE")]
public string PrinterAE { get; set; }


这是TPatient:

[BsonIgnore]
public const string TBName = "tpatient";

[BsonId]
public string StudyUID { get; set; }

[BsonElement("AccessionNumber")]
public string AccessionNumber { get; set; }

[BsonElement("PatientID")]
public string PatientID { get; set; }

[BsonElement("PatientName")]
public string PatientName { get; set; }

[BsonElement("Sex")]
public string Sex { get; set; }

[BsonElement("Birthday")]
public DateTime? Birthday { get; set; }

[BsonElement("Age")]
public string Age { get; set; }

[BsonElement("ReferringPhysician")]
public string ReferringPhysician { get; set; }

[BsonElement("Operator")]
public string Operator { get; set; }

[BsonElement("History")]
public string History { get; set; }

[BsonElement("StudyDescription")]
public string StudyDescription { get; set; }

[BsonElement("StudyDate")]
public DateTime? StudyDate { get; set; }

[BsonElement("StudyTime")]
public DateTime? StudyTime { get; set; }

[BsonElement("Editlogs")]
private List<TEditlog> _editlogs { set; get; }

然后通过以下方式查询到指定时间内的所有数据:

private IMongoCollection<TStudy> _studies => _database.GetCollection<TStudy>(TStudy.TBName);

var fromTimeFilter = Builders<TStudy>.Filter.Gt("StudyDate", fromTime);
var toTimeFilter = Builders<TStudy>.Filter.Lt("StudyDate", toTime);
var searchFilter = Builders<TStudy>.Filter.And(fromTimeFilter, toTimeFilter);
return _studies.Find(searchFilter).ToEnumerable();

上层界面获取到IEnumerable<TStudy> 类型的数据后直接绑定到datagrid,只有200组数据,但是下面的这段代码需要近两秒的时间,用mysql+Linq,从查询到显示结果花费的时间1s都不到,差距有点大,请问是我那里优化不对么?
我感觉是不是在_studies.Find(searchFilter).ToEnumerable() 返回的时候是不是mongo内部还没有真正将数据库中的数据映射到实体中, 直到数据源绑定的时候才开始映射数据,而映射的这一步又比较耗时么?






...全文
653 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
SDHU 2019-03-01
  • 打赏
  • 举报
回复
耗时的代码上面忘了贴了

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧